インストールすると、通常、カテゴリに対して動作する機能が、テンプレートのアイテムの本体で動作するようになるかもしれないプラグインです。
NP_ItemCatID.php
<?php
class NP_ItemCatID extends NucleusPlugin{
function getName() {return 'Item Cat ID';}
function getAuthor() {return 'akebia';}
function getURL() {return 'http://nyan.co.uk/akebia/item/291';}
function getVersion() {return '1.0';}
function getDescription(){return '';}
function supportsFeature($w){return ($w == 'SqlTablePrefix') ? 1 : 0;}
function getEventList()
{return array('PreSkinParse', 'PreItem', 'PostItem');}
function event_PreSkinParse(){$this->org_catid = $GLOBALS['catid'];}
function event_PreItem($data){
$GLOBALS['catid'] = quickQuery('SELECT icat as result FROM ' .
sql_table('item') . ' WHERE inumber=' . $data['item']->itemid);
}
function event_PostItem(){$GLOBALS['catid'] = $this->org_catid;}
}
?>
NP_znItemCacheと併用する時には、NP_znItemCacheのオプションの「常に動作させるプラグイン」に「NP_ItemCatID」を加えて下さい。
NP_ItemCatIDは、アイテム毎のテンプレートが処理される直前に、Nucleusのグローバル変数「catid」にアイテムに関連付けられたカテゴリのIDを格納します。アイテム毎のテンプレートの処理が終了すると、Nucleusのグローバル変数「catid」をスキンが処理される直前の状態に戻します。こうすると、Nucleusのグローバル変数「catid」が真の時に動作するタイプの機能をアイテム毎に動作させることができます。
あけび猫は、これを、NP_ExtraSkinJPの部品タイプが「blogとcategory」の部品をアイテムの本体に挿入するのに使っています。ちょっと、使ってみている所では、問題なく動作しているようですが、今後、どのような不具合に気が付くかは謎です。
NP_ItemCatIDをインストールすると、アイテムの本体において、Nucleusのグローバル変数「catid」は、クエリ文字列等に関わらず常に当該アイテムに関連付けられたカテゴリのIDになるので、アイテムの本体において、catidがクエリ文字列等で指定されたカテゴリIDになることを前提としたテンプレートで不具合が出るかもしれません。また、アイテムの処理後にcatidがスキンの処理前の状態に戻されるので、スキンの処理中にcatidが変更される事を前提としたシステムで不具合が出るかもしれません。