プラグインに、独自テンプレートパーツを提供するプラグインです。
一般に、プラグイン独自のデータは、プラグインオプションで定義する場合が多いのですが、グローバルオプションでは1セット、ブログオプションでは1ブログに対し1セットしか定義できず、複数の用途で共通の値を使いまわさなければならないということがよくあります。
スペシャルテンプレートパーツを使用すると、各プラグインでは簡単に独自データの定義、呼び出しが可能になります。独自データの定義には、NP_znSpecialTemplatePartsが必要になりますが、呼び出しはNucleus標準の機能を使うため、このプラグインを介する必要はありません。データのインポート・エクスポートも可能です。(別環境へのデータ移行も楽になります。)
スペシャルテンプレートパーツの作成
独自テンプレートパーツを使用するプラグイン側で、以下のようにパーツを定義します。
function getTemplateParts()
{
return array(
'SUBMIT' => 'メールタイトル',
'BODY' => 'メール本文',
);
}
必要な準備は以上です。
これで独自管理ページを作る必要もなくNucleus標準機能で独自パーツの管理ができるようになります。
管理画面のテンプレート作成画面に、「テンプレートの種類」として対象プラグインの名前が列挙されるようになります。

テンプレートを作成し、編集画面に入ると、プラグインで定義した独自テンプレートパーツが増えています。
スペシャルテンプレートパーツを使用する
各プラグインで、スペシャルテンプレートパーツを使用するために、NP_znSpecialTemplatePartsを介する必要はありません。Nucleus標準機能で、スペシャルテンプレートパーツを呼び出すことができます。(Nucleusの内部的には、作成された時点で「スペシャル」ではなく標準のパーツと同じ扱いになっています。)
global $manager;
$template = & $manager->getTemplate($templateName);
これだけで、複数のスペシャルテンプレートパーツがクエリ1発で取得できていますので、あとはもう煮るなり焼くなりどうにでもしちゃってください。
例えば、こんな感じ。(<%title%>と、<%itemid%>を使えるテンプレートパーツ)
$submitvals = array(
'title' => $item['title'],
'itemid' => $itemid,
);
$mailto_title = TEMPLATE::fill($template['SUBMIT'], $submitvals);
上の例は、NP_NotifyCommentToAuthorっていう、コメントを著者に通知するプラグインの一部なんですが、スペシャルテンプレートパーツで通知メールの書式を定義するようにしています。
さて、
プラグインのデータをプラグインオプションで定義する場合は、デフォルト値を設定することができますよね。
スペシャルテンプレートパーツを、汎用的に使用するなら、デフォルト値の設定も欲しいところです。
スペシャルテンプレートパーツのデフォルト値を定義
独自テンプレートパーツを使用するプラグイン側で、以下のようにデフォルト値を定義します。(デフォルト値が必要ない場合、もちろん定義も必要ありません。
function getTemplatePartsDefaultValue()
{
return array(
'SUBMIT' => 'デフォルトの値をここに書きます。。',
'BODY' => 'デフォルトの値をここにかきます。。',
);
}
これで、テンプレートを作成したときに、デフォルト値が入った状態になっています。
最後に、
注意点
作成したテンプレートデータを、NP_znSpecialTemplatePartsがインストールされていない状態で再編集してしまうと、独自パーツは消えてなくなってしまいます。Nucleus標準機能でエクスポートできるので、こまめにバックアップすることをオススメします。(
自動バックアッププラグインなんてのもあります。)
NP_znCustomAdmin(ver0.6.4)、heliumをインストール後、管理画面のスキンをheliumに切り替えました。
その後、NP_znSpecialTemplateParts(ver0.0.5alpha)をインストールして、テンプレート編集画面からheliumを見たところ、「NP_znCustomAdmin」の項目には「管理画面のヘッダ」のタイトル部分しか現れません。入力欄は全く出ない状態です。
Nucleusはver3.3です。文字コードをEUCに変換して使用しています。
どうしたら良いでしょう? ヒントだけでも結構ですので、ご教授お願いします。