スキンを変更するプラグインのひな形2
2005年10月30日
こちらは別の、さらに簡単なバージョン。
Nucleusコアからコピーしてきた機能は、index.phpにあるselector()だけである。この部分がNucleusのバージョンアップで変更になる可能性は、ほとんど無いのではなかろうか。先に挙げた例に比べて、実用的のような気がする。
使用するには、このプラグイン用のテンポラリなスキン(ここでは、id=6とした)を用意しておく。そのテンポラリスキンの内容をMySQL(もしくは、SKIN::update)で変更した後、selector()を呼び出せばよい。
ただし、同時アクセスの可能性に備えて、
1)スキンのパースが完全に終わるか、テンポラリスキンへの書き込みが終わるまで、別のスキンパースをevent_PreSkinParse()の最初の方で待機させておく。
2)プラグインが呼び出されるたびに新しくテンポラリスキンを作成し、使用後に破棄する。
3)ユーザによるスキンの変更を何らかの方法でトラックし、変更があった時のみテンポラリスキンを書き換える。1)と組み合わせて使う。
等の処理が必要である。
<?php
class NP_preSkinParse extends NucleusPlugin {
function getName() { return 'NP_preSkinParse'; }
function getVersion() { return '0.1.1a'; }
function getEventList() { return array('PreSkinParse'); }
function event_PreSkinParse(&$data) {
global $skinid,$manager;
$newSubscriptions = array();
$i=-1;
foreach($manager->subscriptions['PreSkinParse'] as $value)
if (0<=$i) $newSubscriptions[$i++]=$value;
else if ($value==$this->getName()) $i=0;
$manager->subscriptions['PreSkinParse']=$newSubscriptions;
$skinid=6;
selector();
exit;
}
}
?>Nucleusコアからコピーしてきた機能は、index.phpにあるselector()だけである。この部分がNucleusのバージョンアップで変更になる可能性は、ほとんど無いのではなかろうか。先に挙げた例に比べて、実用的のような気がする。
使用するには、このプラグイン用のテンポラリなスキン(ここでは、id=6とした)を用意しておく。そのテンポラリスキンの内容をMySQL(もしくは、SKIN::update)で変更した後、selector()を呼び出せばよい。
ただし、同時アクセスの可能性に備えて、
1)スキンのパースが完全に終わるか、テンポラリスキンへの書き込みが終わるまで、別のスキンパースをevent_PreSkinParse()の最初の方で待機させておく。
2)プラグインが呼び出されるたびに新しくテンポラリスキンを作成し、使用後に破棄する。
3)ユーザによるスキンの変更を何らかの方法でトラックし、変更があった時のみテンポラリスキンを書き換える。1)と組み合わせて使う。
等の処理が必要である。