ここではテンプレートおよびモジュールを作成するための情報を提供します。
■ 全体的な構造について ▲
まず、GsBlog がメニューやコンテンツを表示する場合に、どのようなファイルをどのような順序で読み込んでいるか説明します。ファイルの読み込みには PHP の include() 関数が用いられています。(右の図を参照)
ユーザーが GsBlog にアクセスするとき、まず index.php にアクセスしますが、index.php のみでは何も表示されません。html タグさえ記述していないので、これだけでは何も起こらないのです。index.php の内部では、まず始めに 右の図の 1 〜 5 のファイルを読み込み、これらのファイルから動作に必要な変数を取得します。ここまでではまだ何も出力(表示)されません。GsBlog の表示は 6 と 8 のファイルを読み込むことで決定しますので、テンプレートを作成するにはこれらのファイルを変更したり作り直したりすることになります。
7 は IP 制限を有効にした場合に読み込まれるファイルですが、テンプレートには関係ありません。● 6 言語ファイル ▲
言語ファイルとは、メニューにある「Topic Category」などのテキストを設定しているファイルで、各種所に表示される、データ以外の文字列を格納しています。通常の場合、language フォルダの中にある言語セット(フォルダ)を、コントロール・パネルの「言語/文字コード」の切り替えによって読み込んでいます。
通常の言語ファイルの読み込み先:language/$language/lang_main_set.php
ここでの $language という変数は言語セットのフォルダ名を指し、コントロール・パネルの「言語/文字コード」で選択した値によって変わります。
コントロール・パネルの「言語/文字コード」の選択肢に「テンプレート内の言語セット」というものがありますが、この値に設定するとテンプレートセットフォルダの中にある language というフォルダを言語セットとして読み込みます。
テンプレート内の言語セットの読み込み先:template/$index_dir/language/lang_main_set.php
ここでの $index_dir という変数はテンプレートセット名(フォルダ名)です。$index_dir の値はコントロール・パネルの「テンプレート」で選択した値になります。
少しわかりずらいかも知れませんが、ここでは
「通常は index.php と同じ階層にある language フォルダ内の言語セットを読み込むが、テンプレートでメニュータイトルなどの書式を変更したい場合はテンプレートフォルダ内に language フォルダを作り、そこへ言語ファイルを置く」
と思っておいて下さい。● 8 テンプレートの読み込み ▲
この部分がテンプレート実体の読み込みです。index.php は最後にテンプレートフォルダの中の main.php というファイルを読み込みます。main.php は html の画面レイアウト定義するとともに、この main.php からさらに細かなオブジェクトを読み込むという構造になっています。先の図のように、index.php からは
template/$index_dir/main.php
として呼び出されます。この $index_dir がテンプレートセットのディレクトリ名になり、コントロール・パネルで切り替えることによってフォルダ単位でテンプレートを切り替える仕様となっています。
■ テンプレートフォルダの中身 ▲
では、テンプレートフォルダの中身はどのような構造にすればよいのかということですが、次の図を見ながら後の説明を読んで下さい。
テンプレートはフォルダとしてまとめられています。例として、上の図では default テンプレートの構造を示しています。
まず、index.php と同じ階層に template フォルダがあり、テンプレートのフォルダはこの中へ置きます。するとコントロール・パネルで選択できるようになり、随時切り替えができるようになります。例に挙げたテンプレート名は default で、フォルダ名も default となっています。その中の最も重要なファイルは css.php と main.php です。css.php はスタイルシートになっていて、そのテンプレートで使用するスタイルシートは必ず main.php と同じく新しいテンプレートフォルダの第一階層へ置きます。スタイルシートについてここでは詳しく解説しませんので、書籍やネット上の情報を参照して下さい。
main.php は html ページの構造を定義します。つまり <html> から始まり </html> で終わる一般的な html ウェブページと思っていただければ結構です。この main.php は html のテーブルによっていくつかのブロック(デフォルトでは9)を形成しており、さらに各ブロックを読み込みます。各ブロックへ読み込むファイルは「block」フォルダ(template/$index_dir/block)の中に置かれています。
そして各ブロックファイル(block_01.php 〜 block_09.php)はさらに細かな「オブジェクト」を読み込みます。オブジェクトとは、カレンダーであったり、カテゴリインデックスであったり、RSSへのリンクであったりと様々です。各ブロックファイルから読み込まれるオブジェクトファイルはテンプレートフォルダの中にはありません。index.php と同階層の object フォルダに入っています。オブジェクトファイルからまた別のファイルを読み込んだりしている場合もありますが、そこまでカスタマイズが必要であれば各ファイルを解析してみて下さい。では default フォルダの中にある language や images、object といったフォルダはどのように使うのでしょうか?
まず、default テンプレートフォルダの中にある language フォルダには、language/japanese-euc フォルダの中身と同じファイル群が入っています。コントロール・パネルの「言語/文字コード」の設定で「japanese-euc」が選択されていれば language/japanese-euc フォルダの言語ファイル群が使用され、「テンプレート内の言語セット」が選択されていれば template/$index_dir/language(default テンプレートを使用している場合は template/default/language)フォルダに入っている言語ファイル群が使用されるというわけです。
つまり、カテゴリメニューの上に表示される「Topic Category」という文字列を「トピック・カテゴリ」という文字列に変更したい場合、template/default/language の中にある lang_main_set.php に記述されている $lang_topic_categ = "Topic Category"; という一行を $lang_topic_categ = "トピック・カテゴリ"; と書き換え、コントロール・パネルの「言語/文字コード」の設定で「テンプレート内の言語セット」を選択すれば OK です。
ただし、言語ファイルは完全にセットの形でフォルダ内に存在しなければなりません。lang_main_set.php だけを書き換えたからといって、template/default/language フォルダの中に lang_main_set.php だけを置いておくと他の文字列が表示されなくなってしまいますので、必ず8つのファイルを揃えておくようにして下さい。
また、逆に言えば、コントロール・パネルの「言語/文字コード」の設定が「テンプレート内の言語セット」ではない場合、template/default/language フォルダは空でも差し支えなく、テンプレートフォルダ内に language フォルダさえ必要ではないということです。さて、language フォルダの使い方を説明しましたが、基本的にはテンプレートフォルダ内の images や object といったフォルダも同様のものです。これらは空のままでもかまいません。
が、時には「このテンプレートに切り替えた時だけここにこの画像を表示したいんだけど」という場合があると思います。そんな時は index.php と同じ階層の images フォルダに画像を入れるのではなく、テンプレートフォルダ内の images フォルダに画像ファイルを入れ、テンプレートフォルダ内のどこかのファイルから読み込んでやるようにすれば、メインの images フォルダが肥大化することもありませんし、第三者にテンプレートを配布する際も取り扱いがラクになります。
同じように、メインの(index.php と同階層の)object フォルダを少し書き換えたいという場合があるでしょう。そういう場合はテンプレートフォルダ内の object フォルダに変更したファイルを置き、block ファイルから object を読み込む際に include("./object/hogehoge.php"); とせずに include("./template/$index_dir/object/hogehoge.php"); とすれば、そのテンプレートを使用した場合のみ動作するオブジェクトを作成できます。
■ テンプレートフォルダ内のファイルへのパス ▲
今までの説明でおわかりのように、各ブロックやオブジェクトに至るまで、すべてのファイルは index.php を起点に読み込まれます。ですので、テンプレートフォルダ内のファイルから他のファイルを読み込む際の相対パスも index.php を起点にしたものとなります。
テンプレートフォルダ名は「$index_dir」という変数で提供されますが、index.php から見たテンプレートフォルダへの相対パスは「$tempdir」という変数に格納されています。テンプレートフォルダ名が「default」である場合、「$index_dir」は「default」と等価であり、「$tempdir」は「./template/default」と等価です。等価と書きましたが、コントロール・パネルの設定により変数が変動しますので、直接パスを指定せず、必ず以下のように変数を含んだ形でパスを指定して下さい。
以下に、テンプレートフォルダ内の各ファイルやフォルダへの相対パスを示します。
- css.php への相対パス
「$tempdir/css.php」または「./template/$index_dir/css.php」- main.php への相対パス
「$tempdir/main.php」または「./template/$index_dir/main.php」- block フォルダ内のファイル(例:block_01.php)への相対パス
「$tempdir/block/block_01.php」または「./template/$index_dir/block/block_01.php」- language フォルダ内のファイル(例:lang_main_set.php)への相対パス
「$tempdir/language/lang_main_set.php」または「./template/$index_dir/language/lang_main_set.php」- object フォルダ内のファイル(例:category_menu.php)への相対パス
「$tempdir/object/category_menu.php」または「./template/$index_dir/object/category_menu.php」- images フォルダ内のファイル(例:title.gif)への相対パス
「$tempdir/images/title.gif」または「./template/$index_dir/images/title.gif」また、テンプレートフォルダ外のファイルやフォルダにアクセスする場合、index.php が起点として考えればどこにあるファイルでも読み込むことができます。
例:include フォルダにある headline.php を読み込みたい場合のパス →「./include/headline.php」
■ テンプレートを作成する場合のルール ▲
- template フォルダ以外のファイルを改変しない
- template フォルダ外のファイルを改変したい場合はテンプレートフォルダ内へコピーを置き、そのコピーを改変したものを読み込む
- テンプレートフォルダ内のファイルへのアクセスは必ず変数を用いたパスで指定する
以上です。もちろんご自分のサイトをいじる場合はこのルールは守らなくてもいいですが、テンプレートを作成して配布したりする場合、テンプレートフォルダ外のファイルは絶対に改変しないで下さい。
カスタマイズ部分はすべてテンプレートフォルダ内に納めるです。
■ モジュール作成のヒント ▲
メインエリア(デフォルトでは block_07)に表示させるモジュールを作成する場合、モジュールのセットをフォルダにまとめて module フォルダに置いて下さい。そして、モジュールを呼び出した時に最初に表示させるファイルを index.php として下さい。すでに、GsBlog に付属している「掲示板」は bbs というモジュールとして組み込まれています。この掲示板モジュールを例にすると、モジュールフォルダ名は「bbs」で、掲示板を呼び出した際、メインエリアには bbs フォルダ内の index.php が呼び出されます。
そして、モジュールを呼び出すためには、gsblog の index.php にモジュールフォルダ名を「module」という変数名を用いて GET で渡してやります。GsBlog の URL が http://localhost/gsblog/index.php であれば、掲示板を呼び出すためには
http://localhost/gsblog/index.php?module=bbs
となるわけです。もし、モジュールフォルダ名が「photo_album」であるならば
http://localhost/gsblog/index.php?module=photo_album
としてアクセスすると、メインエリアには ./module/photo_album/index.php が読み込まれます。もちろん、このURLの後にモジュール内で使用する変数を付加してもかまいません。掲示板モジュールで2ページ目の記事を表示する場合には
http://localhost/gsblog/index.php?module=bbs&page=2
という具合です。
モジュールもテンプレートと同様に、モジュールフォルダ内で完結されているものを作成されるようにお願いします。もし、メインエリアを使用しない・・・たとえば投稿の入力を支援するようなツールはこの限りではありません。そのような場合は GsBlog のスクリプトを必要な分だけ解析して作成して下さい。
なお、モジュールやテンプレートについてもっと詳しく知りたい場合や質問がある場合は サポート掲示板 でお願いします。