# 静的ページプラグイン

## 概要

静的ページプラグインは、本来、(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のブロックのような外見をしているとは限りません。この目的のためには、下にある「ページをブロックで囲む」を「はい」にします。

メニューでの並べ替え項目: サイトのメニューに表示される静的ページを並べ換えることもできます(index.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を許可する(allow_php) | `はい` | 静的ページにおいて、PHPを許可する。つまり、この設定で、個々のページの設定を上書きします
| ページ保存時にPHPの実行を有効にする(enable_eval_php_save) | いいえ(false) | ページを保存する際に、PHPの実行をグローバルに許可するか田舎を指定します。 この設定が有効なのはwebサイトで使用するPHPがバージョン7以降の場合だけです。 たいていの場合、「PHPを許可する」を「はい」に設定していれば、 この設定値も「はい」に設定する必要があるでしょう。PHPのコードにもよりますが、場合によっては 問題が起こるかもしれません。たとえば、ページのPHPのコードで他のページへ リダイレクトする場合、この設定を「いいえ」にする必要があるでしょう。PHPをパース中に、 リダイレクトのせいでページを保存するプロセスが中断する可能性があるからです。
センターブロックの並べ替え(sort_by) | ページID | センターブロックに静的ページが複数表示される場合の順番を設定します。ページID、ページタイトル、最後に編集した日付から選べます。
メニューの並べ替え(sort_menu_by) | ラベル | サイトメニューの順番を設定します。ページラベル、ページID, ページタイトル、最後に編集した日付から選べます。
管理者ページの並べ替え(sort_list_by) | タイトル | 管理者専用画面で表示する並べ替え順のデフォルトを指定します。 所有者ID順, ページID順, ページタイトル順, そして編集日付順です。
所有者の削除と共に削除する(delete_pages) | いいえ | ページの所有者のアカウントが削除された場合、つまりその静的ページを最初に作成したユーザーが居なくなった場合、「はい」ならそのページを削除し、「いいえ」なら"Root"グループのユーザー(通常は最も小さい値のIDのRootユーザー)に変更します。
ページをブロックで囲む(in_block) | はい | 静的ページを作成する際、ページをブロックで囲むモードのデフォルトを設定します。
閲覧数を表示する(show_hits) | いいえ | 閲覧回数を表示するかどうかを設定します。
日時を表示する(show_date) | はい | 最後に編集した日時を表示するかどうかを設定します。
HTMLフィルターを適用する(filter_html) | いいえ | GeeklogのHTMLフィルターを静的ページの編集時に適用させるかどうかを設定します。
コンテンツを検閲する(censor) | いいえ | Geeklogの"バッドワード"フィルターを静的ページの編集時に適用させるかどうかを設定します。
ページ保存後の画面遷移(aftersave) | 静的ページ管理を表示する | 静的ページ保存後の画面遷移を設定します: 編集した静的ページを表示します。 静的ページ管理を表示します(デフォルト)。 Home(サイトのトップページ)を表示します。 管理画面トップを表示します。
フィードに書き出す最大ページ数(atom_max_items) | 10 | WebサービスAPIによってatomフィードに書き出す静的ページ数の最大値を指定します。
メタタグを有効にする(meta_tags) | いいえ | 静的ページが表示されたときメタタグをセットするかどうかを指定します。
新規作成時のデフォルト(comment_code) | -1 | 静的ページにコメントを許可 (0) または不可 (-1) を指定します。 これは静的ページ新規作成時のデフォルトとなり、すべての静的ページに対してモードが上書きされます。
structured_data_type_default | 'core-webpage' | ページを新規作成する場合に適用される構造化データタイプの既定値。構造化データとGeeklogへの統合についての詳しい情報は、このページをご覧ください。
ドラフトモードをデフォルトにする(draft_flag) | 0 | 静的ページのデフォルト: ドラフトフラグ ON (1) または OFF (0) を指定します。
パンくずリストを無効にする(disable_breadcrumbs_staticpages) | 0 | パンくずリストを無効(0)、または有効(1)にします。
デフォルトキャッシュタイム(default_cache_time) | 0 | 静的ページのデフォルトのキャッシュ時間です。 指定可能な値: 1以上 = 静的ページが再生成されてキャッシュファイルに保存されるまでにキャッシュされる秒数。 0 = キャッシュされません。 ページは常に再生成されます。 -1 = 常にキャッシュされ、ページが更新され、静的ページエディタで保存されたときにのみ再生成されます。
静的ページのLikes(likes_pages) | 0 | 静的ページでLikesコントロールを無効にする場合は0を、LikesとDislikesの両方を有効にする場合は1を、Likesのみを有効にするには2を指定します。この設定は静的ページ全体の既定値で、個々の静的ページで変更することができます。 静的ページでLikesを有効にするには、Geeklogのコンフィギュレーションで「Likesを有効にする」を有効にする必要があります。

### 新着ブロック

項目(変数) | デフォルト | 説明
--- | --- | ---
静的ページの"新着"期間(newstaticpagesinterval) | 1209600秒 (= 2週間) | 静的ページが新着ブロックに表示される期間を秒数で指定します。
新着ブロック表示(hidenewstaticpages) | 表示しない | 新着ブロックに、'表示しない'、'作成日付によって表示する'、'編集日付によって表示する'を選択します。
タイトル最大長(title_trim_length) | 20 | 新着ブロックに表示するタイトルのトリミングの文字数を指定します。
センターブロックのページを含む(includecenterblocks) | いいえ | センターブロックに表示する静的ページを含むかどうかを指定します。
静的ページPHPを含む(includephp) | いいえ | 静的ページPHPを含むを含むかどうかを指定します。

### 検索結果

項目(変数) | デフォルト | 説明
--- | --- | ---
静的ページを検索する(includesearch) | はい | 検索結果に静的ページを含ませるかどうかを指定します。
センターブロックの静的ページを含む(includesearchcenterblocks) | いいえ | 検索結果にセンターブロックの静的ページを含ませるかどうかを指定します。
検索結果にPHPを実行する静的ページを含める(includesearchphp) | いいえ | 「はい」に設定すると、検索結果にPHPを実行する静的ページを含めます。 PHPを実行する静的ページで検索を行う必要があるため、そのページのキャッシュを用いることに注意してください。エディターでページを保存する際と(キャッシュが有効な場合に)そのページのキャッシュが更新される際に、キャッシュされたページが作成されます。つまり、そのページにアクセスできるすべてのユーザーが同一の検索結果のキャッシュを持つことになります。 そのページで自動タグやPHPを使用すると、ユーザーによって[自動タグやPHPへのアクセス権が異なるため]異なるコンテンツ(情報内容)が生成されるかもしれません。検索結果のキャッシュはそのページのビューの一つにすぎないため、それが検索されることになります。このため、検索結果がユーザーがそのページを訪問したときに目にしたものとわずかに異なるかもしれません。静的ページでPHPを実行し、かつ、このオプションを「はい」に設定する場合には、このような欠点があることを考慮してください。
検索結果にテンプレートとして使用されている静的ページを含める(includesearchtemplate) | いいえ | 「はい」に設定すると、検索結果にテンプレートとして使用されている静的ページ(以下、「テンプレートページ」と表記)を含めます。 テンプレートページで検索を行う必要があるため、そのページのキャッシュを用いることに注意してください。エディターでページを保存する際と(キャッシュが有効な場合に)そのページのキャッシュが更新される際に、キャッシュされたページが作成されます。つまり、そのページにアクセスできるすべてのユーザーが同一の検索結果のキャッシュを持つことになります。 そのページで自動タグやPHPを使用すると、ユーザーによって[自動タグやPHPへのアクセス権が異なるため]異なるコンテンツ(情報内容)が生成されるかもしれません。検索結果のキャッシュはそのテンプレートページのビューの一つにすぎないため、それが検索されることになります。このため、検索結果がユーザーがそのページを訪問したときに目にしたものとわずかに異なるかもしれません。静的ページでPHPを実行し、かつ、このオプションを「はい」に設定する場合には、このような欠点があることを考慮してください。

### パーミッションのデフォルト

項目(変数) | デフォルト | 説明
--- | --- | ---
パーミッションのデフォルト[0](default_permissions[0]) | 表示・編集 | リンクに関する所有者のパーミッションのデフォルトを指定します。
パーミッションのデフォルト[1](default_permissions[1]) | 表示 | リンクに関するグループのパーミッションのデフォルトを指定します。
パーミッションのデフォルト[2](default_permissions[2]) | 表示 | リンクに関するメンバーのパーミッションのデフォルトを指定します。
パーミッションのデフォルト[3](default_permissions[3]) | 表示 | リンクに関するゲストユーザーのパーミッションのデフォルトを指定します。

### 自動タグのパーミッション

項目(変数) | デフォルト | 説明
--- | --- | ---
自動タグ[staticpage: ]のパーミッション[0](autotag_permissions_staticpage[0]) | 利用する | 自動タグの利用に関する所有者(デフォルトはRootユーザー)のパーミッションを指定します。
自動タグ[staticpage: ]のパーミッション[1](autotag_permissions_staticpage[1]) | 利用する | 自動タグの利用に関するStatic Page Adminグループのパーミッションを指定します。
自動タグ[staticpage: ]のパーミッション[2](autotag_permissions_staticpage[2]) | 利用する | 自動タグの利用に関するメンバーのパーミッションを指定します。
自動タグ[staticpage: ]のパーミッション[3](autotag_permissions_staticpage[3]) | 利用する | 自動タグの利用に関するゲストユーザーのパーミッションを指定します。
自動タグ[staticpage_content: ]のパーミッション[0](autotag_permissions_staticpage_content[0]) | 利用する | 自動タグの利用に関する所有者(デフォルトはRootユーザー)のパーミッションを指定します。
自動タグ[staticpage_content: ]のパーミッション[1](autotag_permissions_staticpage_content[1]) | 利用する | 自動タグの利用に関するStatic Page Adminグループのパーミッションを指定します。
自動タグ[staticpage_content: ]のパーミッション[2](autotag_permissions_staticpage_content[2]) | 利用する | 自動タグの利用に関するメンバーのパーミッションを指定します。
自動タグ[staticpage_content: ]のパーミッション[3](autotag_permissions_staticpage_content[3]) | 利用する | 自動タグの利用に関するゲストユーザーのパーミッションを指定します。

## 自動タグ

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

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