Web Artisan Blog - ウェブ アルチザン ブログ

Nucleus:スキン/テンプレート変数「phpinclude」でblog内の各値を参照する方法

Nucleus (35 items)

2005年03月04日

Nucleusで構築されたサイト上で独自に何か処理したい場合は、
プラグインを作成する事が一般的です。
もちろんそれでいいんですが、それとは別に、
スキン/テンプレート変数「phpinclude」を使用する方法もあります。

プラグイン作成の場合は、
そのフォーマット(クラスで作りdoSkinVar等のメソッドを記述)が決められていますが、
「phpinclude」の場合は、まんまPHPのコードを自由に書くことが出来ます。
つまり、プラグイン用にコードを書き換えることなく、そのまま使えます。
以下、少しNucleusのヘルプから抜粋してみます。。

スキン/テンプレート変数:phpinclude
PHPファイルをアウトプット時にインクルードする。ファイルの中身はPHPとして解釈されるので注意すること。Nucleusのスキン/テンプレート変数は展開されない。(他のインクルードオプションとして、parsedincludeとincludeをみること)

ファイルはスタンダードなphpのコマンドinclude()を使ってインクルードされます。このコマンドは内部のクラス・メソッドから呼び出されるので、自身でアクセスしたいグローバル変数を宣言する必要があります。多くの標準的な変数はNucleusによって自動的にグローバルが宣言されます。


・・ふむふむ。
まあ、こういうものなのですが、
どういう時にこれ使うねん?といった判断は難しいところです。
結局、プラグインでいいんですがね。。

ただ、全く別のところで作成したphpファイルを、
各ページが表示されたタイミングで行いたいとか、
Nucleusとは別の世界で作ったphpを実行したい場合なんかに適用されるでしょう。
例えば、単純なアクセスログを記録するphpファイルがあったとして、
それをNucleusで作成したサイトにも使いたい場合は、
この「phpinclude」で、そのphpを呼び出せばいいのです。

で、これはこれでいいんですが、せっかくNucleusから呼び出すんだから、
Nucleus上の値(blog名とかカテゴリー名、各記事タイトル等)を、
このphpincludeしたphpでは使えないの?といった疑問も出てくると思います。

これについても、ヘルプから抜粋してみます。

スキン/テンプレート変数:phpinclude:vars
次のグローバル変数は、スキン/テンプレート変数のphpincludeによってインクルードされたファイルからアクセスできるものです:

$GATEWAY_INTERFACE, $SERVER_NAME, $SERVER_SOFTWARE
$SERVER_PROTOCOL, $REQUEST_METHOD, $QUERY_STRING
$DOCUMENT_ROOT, $HTTP_ACCEPT・・・・・


上で書いてるのは、phpincludeで呼び出したphp内では、
”$_SERVER['REMOTE_HOST']”とかもろもろのSERVER変数などを
参照できますよという事です。(何も書かなくても)

でもこれだけだと、Nucleus上の各値は参照できるかわかりません。
重要なのは下記一文。。

他の変数に関しては、'global $varname;'をきっちりとコードに加える必要があります。


・・これだけかよっ!
しかし、この事=プラグインで作成する場合と同様に各値を参照できる、
という事になるのです。。


実際の各値の参照の仕方ですが、これはヘルプにも書いてません。。
ではどうするのか??
・・Nucleusはオープンソースです。
ソースから、その方法を拾い出すしかありません。。。
(この辺がプラグイン作成する時も辛いところです)

しかし、phpのソースはかなり多いですよね。
ここでポイントですが、実際参考になるのが、
Nucleusのlibsフォルダ内の「globalfunctions.php」です。
ここに記述されているコードを何となく書くと、
以外にすんなり、プラグインやphpincludeのphp上で各値を参照できます。
※まず「globalfunctions.php」で、”global”で検索し、更にヒットした変数を検索していくと見えてきます。。

では下記に一例を。

//グローバル変数
global $blog, $itemid, $manager, $catid;

//blog名取得
$str = $blog->getName();

//カテゴリー名取得
$str = $blog->getCategoryName($catid);

//各記事タイトル取得
$item = $manager->getItem($itemid,0,0);
$str = $item['title'];


こんな感じでできます。
まず、ヘルプに書いている様に、
phpincludeで呼び出すphp内で使用したいNucleus上の変数を、
'global $varname;'で、きっちりとコードに加えます。

その後、「globalfunctions.php」で拾い出した各メソッドを呼び出すと。


とにかくこのように、Nucleusは後から機能追加がしやすいCMSです。
このphpincludeを使用しても、便利な機能を追加できるかもしれません。
前の記事 次の記事

Comments

コメントは、まだ書かれていません

Add Comments

Trackback

トラックバックはありません

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=440