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 さんなら何か知ってるかもしれませんね。