Nucleus のスキン変数<%if%>の新しい機能
2007年2月26日
しづきさんも書いていたけれど、Nucleus バージョン 3.3 では、スキンの<%if%>がいくらか拡張される。
気がついたのは、まず、プラグインで条件判定ができるdoIf()関数。これは、とっても便利。開発中のキャッシングプラグイン(半年も開発がストップしていて、開発中というのか?)で使用できる。また、NP_ExtendedIf は引退させるか、大幅に変更するかのどちらか。現在Nucleusでフォーラムを構築するためのスキンとプラグインを開発中だけれど、そのプラグインにも導入予定。
他に気がついたのは<%elseif%>が使えるようになったこと。これの導入は3.24かなと思って、3.24がリリースされたときに試してみたけれど、まだだった。
<%if%>文の第一パラメータに何が使えるかは、ACTIONS.php の125行目あたりのcheckCondition::checkCondition()関数に記述されている。
これを見ると、今まであった『category』『blogsetting』『loggedin』『onteam』『admin』『nextitem』『previtem』『skintype』『hasplugin』に加えて、プラグイン名(『NP_』を除いたもの)が指定されていれば条件判定するようになっている。
プラグイン名には、『category』『blogsetting』などは使えない。これらのプラグイン名を使用したオーバライド(例えば、NP_categoryとか)はできない仕様になっている。
プラグイン名判定には、$manager->pluginInstalled()を用いていて、ここでは、nucleus_plugin テーブルの pfile カラムのデータを用いているので、大文字小文字を区別して、『NP_』を取り除いたプラグイン名を指定することになる。
elseif に関しては、こちらを参照。Andyさんに、感謝。サイドバーでの表示変更などに使うと、スキンがかなりすっきりすることが予想される。
スキン変数として何が使えるかは、SKIN.php の270行目あたりに見える。
ここで追加されているのが、『elseif』『ifnot』『elseifnot』の3つ。この機能の実行のためのコードは、BaseActions::parse_ifnot() など(BaseActions クラスは、ACTIONS, COMMENTACTIONS, ITEMACTIONS, PAGEFACTORY の継承元クラス)。
(追記)
ITEMACTIONS では、'if', 'endif' などの記述が見えるものの、コメントアウトされている。従って、テンプレートでは(まだ)<%if%>は使えない。
気がついたのは、まず、プラグインで条件判定ができるdoIf()関数。これは、とっても便利。開発中のキャッシングプラグイン(半年も開発がストップしていて、開発中というのか?)で使用できる。また、NP_ExtendedIf は引退させるか、大幅に変更するかのどちらか。現在Nucleusでフォーラムを構築するためのスキンとプラグインを開発中だけれど、そのプラグインにも導入予定。
他に気がついたのは<%elseif%>が使えるようになったこと。これの導入は3.24かなと思って、3.24がリリースされたときに試してみたけれど、まだだった。
<%if%>文の第一パラメータに何が使えるかは、ACTIONS.php の125行目あたりのcheckCondition::checkCondition()関数に記述されている。
$condition = 0;
switch($field) {
case 'category':
$condition = ($blog && $this->_ifCategory($name,$value));
break;
case 'blogsetting':
$condition = ($blog && ($blog->getSetting($name) == $value));
break;
case 'loggedin':
$condition = $member->isLoggedIn();
break;
case 'onteam':
$condition = $member->isLoggedIn() && $this->_ifOnTeam($name);
break;
case 'admin':
$condition = $member->isLoggedIn() && $this->_ifAdmin($name);
break;
case 'nextitem':
$condition = ($itemidnext != '');
break;
case 'previtem':
$condition = ($itemidprev != '');
break;
case 'skintype':
$condition = ($name == $this->skintype);
break;
case 'hasplugin':
$condition = $this->_ifHasPlugin($name, $value);
break;
default:
$condition = $manager->pluginInstalled('NP_' . $field) && $this->_ifPlugin($field, $name, $value);
break;
}
return $condition;これを見ると、今まであった『category』『blogsetting』『loggedin』『onteam』『admin』『nextitem』『previtem』『skintype』『hasplugin』に加えて、プラグイン名(『NP_』を除いたもの)が指定されていれば条件判定するようになっている。
プラグイン名には、『category』『blogsetting』などは使えない。これらのプラグイン名を使用したオーバライド(例えば、NP_categoryとか)はできない仕様になっている。
プラグイン名判定には、$manager->pluginInstalled()を用いていて、ここでは、nucleus_plugin テーブルの pfile カラムのデータを用いているので、大文字小文字を区別して、『NP_』を取り除いたプラグイン名を指定することになる。
elseif に関しては、こちらを参照。Andyさんに、感謝。サイドバーでの表示変更などに使うと、スキンがかなりすっきりすることが予想される。
スキン変数として何が使えるかは、SKIN.php の270行目あたりに見える。
// some actions that can be performed at any time, from anywhere
$defaultActions = array('otherblog',
'plugin',
'version',
'nucleusbutton',
'include',
'phpinclude',
'parsedinclude',
'loginform',
'sitevar',
'otherarchivelist',
'otherarchivedaylist',
'self',
'adminurl',
'todaylink',
'archivelink',
'member',
'ifcat', // deprecated (Nucleus v2.0)
'category',
'searchform',
'referer',
'skinname',
'skinfile',
'set',
'if',
'else',
'endif',
'elseif',
'ifnot',
'elseifnot',
'charset'
);ここで追加されているのが、『elseif』『ifnot』『elseifnot』の3つ。この機能の実行のためのコードは、BaseActions::parse_ifnot() など(BaseActions クラスは、ACTIONS, COMMENTACTIONS, ITEMACTIONS, PAGEFACTORY の継承元クラス)。
(追記)
ITEMACTIONS では、'if', 'endif' などの記述が見えるものの、コメントアウトされている。従って、テンプレートでは(まだ)<%if%>は使えない。
コメント
佐藤(な) (2007年3月3日 13:53:46)
佐藤(な)です。
いつもお世話になりまくってます。
> テンプレートでは(まだ)<%if%>は使えない。
これ、何でなんでしょう?
ちゃんと、
テンプレートの同じ場所で、開始タグ<%if系%>と、閉じタグ<%endif%>の関係を完結させておけば、
スキン変数との階層構造でも問題ない気がするんですが。
無作法自作プラグインではテンプレートで使っちゃってます。
多分、何か理由があると思うんですよね。
Andyさんの拡張ifのコード、感動しました。
いつもお世話になりまくってます。
> テンプレートでは(まだ)<%if%>は使えない。
これ、何でなんでしょう?
ちゃんと、
テンプレートの同じ場所で、開始タグ<%if系%>と、閉じタグ<%endif%>の関係を完結させておけば、
スキン変数との階層構造でも問題ない気がするんですが。
無作法自作プラグインではテンプレートで使っちゃってます。
多分、何か理由があると思うんですよね。
Andyさんの拡張ifのコード、感動しました。
Katsumi (2007年3月4日 00:44:33)
何でなんでしょう。使えるようにしようとした形跡はあるんですが、コメントアウトで使えなくしてあります。
本家フォーラムに何か書かれてるかもしれませんが、ちゃんとフォローできてません。Andy さんなら何か知ってるかもしれませんね。
本家フォーラムに何か書かれてるかもしれませんが、ちゃんとフォローできてません。Andy さんなら何か知ってるかもしれませんね。