# 静的ページプラグイン

## 概要

静的ページプラグインは、本来、（Geeklogが作成する動的ページとは対照的に）静的コンテンツを持ったページを作成するためのものでした。そういうわけで「静的」という名前になっています。「このサイトについて」や「目標宣言」などのページが思い浮かぶでしょう。

その時以来、人々は様々な目的で静的ページを使用しています。静的ページにPHPのコードを含めることができるようになっていますので、静的ページという名前はもはやだいぶ不適切なものになっています。

## 機能

- PHPの使用をサポート
- 読みやすいURLを作成するための編集可能なページID
- 静的ページをGeeklogのインデックスページと話題ページに、さらに全画面表示("スプラッシュスクリーン機能")にも表示可能
- 既存のページをコピーする機能
- GeeklogのURL書き換え
- 2つの自動タグを実装
- Geeklogのパーミッションシステムを適切にサポート

## PHPの使用

### PHPを使えるようにする

重要: セキュリティ上の理由で、静的ページでのPHP使用はデフォルトでは無効になっています。有効にするには、Static Page Adminグループに、`staticpages.PHP`権限を与える必要があります。そのためには、管理者としてログインし、管理者用メニューから「グループ」を選択します。Static Page Adminを見つけて、グループ名の左側にある編集アイコン（ペンの形）をクリックします。ページの下の方に「権限(Rights)」のリストがあり、`staticpages.delete`と`staticpages.edit`には既にチェックが入っています。Static Page Adminグループに属する人が静的ページでPHPを使えるようにするには、`staticpages.PHP`にチェックを入れてから保存をクリックします。

上述の `staticpages.PHP` 権限に加えて、静的ページ全体でPHPの使用を無効にするグローバルなオプションもあります。このオプションは「管理者用メニュー - コンフィギュレーション - 静的ページ」の中にある「PHPを許可する」です。「いいえ」にすると、`staticpages.PHP`よりも優先され、静的ページの中でPHPを使えなくなります。

### 使用法

静的ページでPHPを不適切に使用すると、セキュリティの問題が発生する可能性があります。注意して使用してください。

静的ページごとにPHPの使用を有効にする必要があります。コンテンツ編集欄の下に、次の選択肢のあるPHPのドロップダウンリストがあります。

- PHPを実行しない
  静的ページの中にPHPのコードが含まれていても、実行されず、コードがそのまま表示されます。
- PHPを実行する(return)
  静的ページに含まれるPHPのコードが実行されます。'return'とは、このページが表示する内容をPHPのコードで（`echo` 文や `print` 文を使って）直接出力する代わりに `return` 文で返すことを意味します。これは静的ページプラグイン ver 1.3から導入されたオプションです。
- PHPを実行する
  静的ページに含まれるPHPのコードが実行されます。このオプションを使うと、ページレイアウトに干渉することなくPHPの`echo`文や`print`文を使ってページの内容を出力できます。

静的ページにPHPのコードを埋め込むときに、PHPの`<?php`タグと`?>`タグを記述してはいけません。静的ページに含まれるPHPのコードは、Geeklog側でこれらのタグを付加されて実行されるからです。

上述の「PHPを実行する」（returnなしの方）を選択する場合は、コードの中でPHPとHTMLを次のように行き来することができます。

    echo "Hello"; ?>, <b>world</b>, <?php echo "how are you?";

この例では、"Hello, world, how are you?"と表示されます。

## ページID

静的ページを新規作成すると、ページIDが自動的に割り当てられます。このIDは日付・時刻と最大3桁のランダムな数字で構成されています。このページのURLを頻繁に使用するつもりなら（Eメールで引用する場合など）、もっと読みやすいページIDにするのは意味のあることでしょう。

「静的ページの編集」では、ページIDを変えることもできます。たとえば、「当サイトに関して」のページのIDを"20030313100131123"から"about"に変えて、次のURLにできます。

`http://yoursite/staticpages/index.php?page=about`

こちらの方が遙かに引用しやすいし、覚えやすいです。GeeklogのURLリライト機能を活用してさらに改善することもできるでしょう。

ページIDで安全に使える文字はアルファベットと数字だけです。各国固有の文字（ひらがな、カタカナ、漢字など）やほとんどの句読点(とはいえ、'-' と '.' は使えるはずです)、スペースは使用しないでください。「静的ページの編集」は一部の不正な文字を検出しますが、全部というわけではありません。

## 静的ページをインデックスページで使用する

Geeklogのセンターブロックの概念では、プラグインがサイトのセンターエリア（つまり、記事と記事の間）にブロックを出力することを許可しています。

「静的ページの編集」で「センターエリア」にチェックを入れると、静的ページを表示する場所を選択するために、「表示エリア」と「話題」というドロップダウンリストが使えるようになります。「表示エリア」で選べるのは、「ページの最上部」、「注目記事の下」、「ページの下」（この3つは説明不要でしょう）と「ページ全体」です。最後の「ページ全体」とは、この静的ページがインデックスページとして表示される、つまり、通常の記事が一切表示されなくなるということです。サイトの「スプラッシュ画面」や「ようこそ」ページを作成するのに役に立つでしょう。

ヒント: 静的ページをスプラッシュ画面として使用する場合、訪問者を普通のインデックスページへ誘導するリンクが必要になることもあるでしょう。この場合は、静的ページの中に`index.php?display=all`というリンクを作成すればよいでしょう。

2番目の「話題」ドロップダウンリストを使うと、静的ページの表示を特定の話題、ホームページ（トップページ）のみ、全ページ（つまり、すべての話題 + ホームページ）に限定できます。これはブロックを表示するオプションと全く同じです。

ヒント: これらのオプションをパーミッションと組み合わせることもできます。たとえば、ゲストユーザにしか表示されない「ようこそ」ページを作成することも可能です。

### ソート（並べ換え）

センターブロックでのソート項目: センターエリアの同一セクション内（たとえば、インデックスページのトップに静的ページを2つ表示する場合）に複数の静的ページを表示させる場合、「管理者用メニュー - コンフィギュレーション - 静的ページ」で表示順を選ぶことができます。選択肢は、次の通りです。

- 日付（更新日時の新しい順に並べ換え）
- ページID（ページIDで並べ換え：デフォルト）
- タイトル（ページのタイトルで並べ換え）

この順序が適用されるのは、センターブロック内の静的ページだけです。センターブロックを出力する他のプラグインはこの順序には含まれません。また、センターブロックは普通のGeeklogのブロックのような外見をしているとは限りません。この目的のためには、下にある「ページをブロックで囲む」を「はい」にします。

メニューでのソート項目: サイトのメニューに表示される静的ページを並べ換えることもできます(`header.thtml` テンプレートファイル内で、 `{plg_menu_elements}` 変数を使用している場合)。この項目も「管理者用メニュー - コンフィギュレーション - 静的ページ」で表示順を選ぶことができます。選択肢は、次の通りです。

- 日付（更新日時の新しい順に並べ換え）
- ラベル（メニューに表示される文字列：デフォルト）
- ページID（ページIDで並べ換え：デフォルト）
- タイトル（ページのタイトルで並べ換え）

## 静的ページをブロックで囲む

「静的ページの編集」で「ブロックで囲む」をチェックすると、静的ページをGeeklogのブロックレイアウトで囲むことができます。この場合、静的ページのタイトルがブロックのタイトルとして使用されます。また、普通のブロックと同様にヘルプ表示用のURLを入力することもできます。URLを入力すると、そのURLにリンクするヘルプアイコンが表示されます。

このオプションのデフォルトは、「管理者用メニュー - コンフィギュレーション - 静的ページ」で設定することができます。

## 静的ページをコピーする

同じような静的ページがたくさんある場合、既存のページをコピーしてから編集したいでしょう。静的ページのリストで、コピー欄のアイコンをクリックすれば簡単にコピーできます。コピーすると新たなページIDがついたページができます。

## URLリライト

この機能は実験的なものであり、IISでは動作しないことが知られています。

Geeklogはある種のURL書き換え、つまり、URLの外観を検索エンジンに拾われやすいものにする機能を持っています。たとえば、

`http://yoursite/staticpages/index.php?page=20030313100131123`

の代わりに、次のような外観にすることができます。

`http://yoursite/staticpages/index.php/20030313100131123`

検索エンジンの中には、URLに '?' や '=' などの文字が含まれていると、そのページをインデックスに登録しないものがあるということが知られています。これをさらに推し進めて、数字で構成されたページIDを（できれば、ページの内容と関連する）単語や表現に置き換えることで、検索エンジンにさらに登録されやすくすることもできるでしょう。

`http://yoursite/staticpages/index.php/about`

URL書き換えを行うには、「管理者用メニュー - コンフィギュレーション - Geeklog - サイト」で「URLリライト」を「はい」にする必要があります。

## 所有者の削除と共に削除する

Geeklogのすべてのオブジェクト同様、静的ページには所有者（そのページの作成者）がいます。そのユーザのアカウントが何らかの理由で削除された場合、そのユーザが所有していた静的ページも削除するか、GeeklogのRootグループに属する人に引き継がせることができます。

「管理者用メニュー - コンフィギュレーション - 静的ページ」で「所有者の削除と共に削除する」を「いいえ」（デフォルト）にすると、所有者が削除されても作成した静的ページは削除されず、Rootグループのメンバ（ユーザIDが最も若い人、つまり、たいていはサイトの管理者）に引き継がれます。「はい」にすると、所有者のアカウントが削除されたとき、作成した静的ページも削除されます。

## コンフィギュレーション

静的ページプラグインのコンフィギュレーションオプションは、コンフィギュレーション管理画面で変更します。

### 静的ページの主な設定

項目(変数) | デフォルト | 説明
--- | --- | ---
PHPを許可する | `はい` | 静的ページにおいて、PHPを許可する。つまり、この設定で、個々のページの設定を上書きします
センターブロックでのソート項目 | `ページID` | センターブロックに静的ページが複数表示される場合の順番を設定します。ページID、ページタイトル、最後に編集した日付から選べます。
メニューでのソート項目 | `ラベル` | サイトメニューの順番を設定します。ページラベル、ページID, ページタイトル、最後に編集した日付から選べます。
所有者の削除と共に削除する | `いいえ` | ページの所有者のアカウントが削除された場合、つまりその静的ページを最初に作成したユーザが居なくなった場合、そのページを'True'なら削除、'False'なら"Root"グループのユーザ(通常は最も小さい値のIDのRootユーザ)に変更します。
ページをブロックで囲む | `はい` | 静的ページを作成する際、ページをブロックで囲むモードのデフォルトを設定します。
ヒット数を表示する | `いいえ` | 閲覧回数を表示するかどうかを設定します。
日時を表示する | `はい` | 最後に編集した日時を表示するかどうかを設定します。
HTMLフィルターを適用する | `いいえ` | GeeklogのHTMLフィルターを静的ページの編集時に適用させるかどうかを設定します。
内容を検閲する | `いいえ` | Geeklogの"バッドワード"フィルターを静的ページの編集時に適用させるかどうかを設定します。
ページ保存後の画面遷移 | `静的ページ管理を表示する` | 静的ページ保存後の画面遷移を設定します: 編集した静的ページを表示します。 静的ページ管理を表示します(デフォルト)。 Home（サイトのトップページ）を表示します。 管理画面トップを表示します。
フィードに書き出す最大ページ数 | 10 | WebサービスAPIによってatomフィードに書き出す静的ページ数の最大値を指定します。

## 自動タグ

静的ページプラグインは、`[staticpage:]` と `[staticpage_content:]` という2つの自動タグを提供します。

- `[staticpage:]` 自動タグは静的ページへのリンクに置き換えられます。コロンの後に静的ページのIDを記述してください。既定では、そのページのタイトルがリンクテキストとして使用されます。静的ページIDの後に半角スペースに続けて独自のリンクテキストを指定することもできます（閉じカッコの前でなければなりません）。
- `[staticpage_content:]` 自動タグは、静的ページの内容に置き換えられます。複数の箇所で同一テキストを使用する際に役に立つでしょう。