テーマオプションの構造
概要
全てのテンプレートとテーマとスタイルは、テンプレートが読み込まれる前に実行される特定のコマンドを保持することができる config.inc.php という名のファイルをあてがうことが可能です。
かつてはここでPHPとSmartyのカスタム関数を登録することができました。
カスタムオプション
Serendipity 1.1-alpha4以降からは、このファイルに特別な設定オプションの配列を入れることもでき、このことにより、Serendipityユーザーに例えば背景色などのテーマ固有のオプションを変更させることができます。
配列は次のような形式になっている必要があります:
<?php
$template_config = array(
array(
'var' => 'colorset',
'name' => 'Color Set',
'description' => 'Enter the color set you want to use for this site',
'type' => 'select',
'default' => 'green',
'select_values' => array('green' => 'Green', 'blue' => 'Blue', 'black' => 'Black')
),
array(
'var' => 'banner_image',
'name' => 'Banner Image',
'description' => 'Enter the URL to your banner image',
'type' => 'string',
'default' => '/serendipity/your_banner.jpg'
),
array(
'var' => 'sidebars',
'name' => 'Sidebars',
'type' => 'string',
'default' => 'left,hide,right'
)
);
$template_config の説明
config.inc.php 内のどこにこれらのオプションをセットするかは、特に重要ではありません。設定オプションはいくつでも使用できます ― 上記のように追加していってください。
ひとつのarray(...)ブロックをコピー&ペーストで各ブロックの下部に足していくだけです。
自作のarray(...)構造が正当なPHPコードであるよう注意してください。
全ての要素はシングルまたはダブルクォートで囲む必要がありますし、カンマ忘れの無いようにしてください。
配列のvarインデックスは設定オプション名であり、後でSmartyテンプレート内で呼び出すことになります。
titleインデックスは設定オプションのタイトルを定義しており、descriptionは設定の説明を保持しています。
(訳者注:"title"はおそらく"name"の誤記だと思われる)
typeはオプションがユーザーにどう表示されるべきかを指定します。
以下の値が指定できます:select, tristate, boolean, radio, string, html, hidden。
もしselectタイプを指定した場合は、上記select_valuesインデックスの例のように、オプションの配列を明示しなければいけません。
defaultには、ユーザーが(まだ)何も選択していない場合のテンプレートオプションの初期値が保持されます。
特別な属性
var sidebarsはとても独特な設定オプションです。 カンマ区切りでコラム名を並べることで、テンプレートがどのサイドバーをいくつサポートするのかを指示できます。
プラグイン管理インターフェースは、構成されたサイドバーそれぞれに一つのコラムを表示するので、プラグインをある場所から他の場所に簡単に移動させることができます。
サイドバーの名称にスペースは使えないので注意してください。 また、サイドバーの名称が6文字よりも長いものは恐らく無いはずです。
ユーザーがサイドバーの名称を設定変更できないようにしたいのなら、あなたのテンプレートの config.inc.php ファイルに $template_config['sidebars'] = 'left,right,hide' とセットすることも可能です。
国際化!
説明文のための定数を使えるように、ぜひ config.inc.php で言語ファイルをインクルードしてみてください:
<?php
// Probe for a language include with constants. Still include
// defines later on, if some constants were missing
$probelang = dirname(__FILE__) . '/' . $serendipity['charset']
. 'lang_' . $serendipity['lang'] . '.inc.php';
if (file_exists($probelang)) {
include $probelang;
}
include dirname(__FILE__) . '/lang_en.inc.php';
$template_config = array(
array(
'var' => 'colorset',
'name' => MYTEMPLATE_COLORSET_TITLE,
'description' => MYTEMPLATE_COLORSET_DESCRIPTION,
'type' => 'select',
'default' => 'green',
'select_values' => array('green' => MYTEMPLATE_COLORSET_GREEN,
'blue' => MYTEMPLATE_COLORSET_BLUE)
),
);
定数を使用することによって、他のユーザがあなたのテンプレートオプション名を他の言語に翻訳するのが容易に可能になります。 一度定数を定義すれば、下記ような内容の例えば lang_en.inc.php や lang_de.inc.php などが作成できます:
define('MYTEMPLATE_COLORSET_TITLE', 'Color Set');
define('MYTEMPLATE_COLORSET_DESCRIPTION', 'Enter the color set you want to use for this site');
さあこれであなた独自の設定オプションができあがりました。
一度Serendipityの管理画面から自分のテンプレートを選択してみましょう。
これらのオプションがインターフェースに現れたでしょうか。
Smartyでのやり方
指定のオプションには、もちろんテンプレートを使う必要があります。
これらは、あなたのSmartyテンプレートファイルのどこかで、Smartyの {$template_option.XXX} 変数を用いることで可能です。
あなたのindex.tplファイルの中に以下のような記述をするということです:
{if $template_option.colorset == 'green'}
<link rel="stylesheet" href="templates/mytemplate/colorset/green.css" />
{elseif $template_option.colorset == 'black'}
<link rel="stylesheet" href="templates/mytemplate/colorset/black.css" />
{elseif $template_option.colorset == 'blue'}
<link rel="stylesheet" href="templates/mytemplate/colorset/blue.css" />
{/if}