2010-07-16 Fri
もう何度も書いておりますが、Nucleusである程度のサイトを構築する場合、「NP_znItemFieldEX」は欠かせません。例えば「商品ブログ」には「値段」「型番」を追加、「イベント」ブログには「チケット発売日」「開始日時」「終了日時」を追加、なんて具合に分かりやすく項目を追加すれば、入力する人の負担をかなり軽減できます。
そしてほんとにありがたいのが、スキンにおいて追加項目の値を評価し記事を抽出する機能です。例えば、「0〜999円の商品一覧」とか、「本日開催のイベント」といった感じで、投稿日時やカテゴリー以外で絞り込む事ができるんですね。しかも追加項目だけでなく、投稿日時、ブログ、カテゴリー、本文、続きや投稿者といった標準の項目も評価することもできます。ちょっと特殊な使用方法なので、詳細は「NP_znItemFieldEXでブログ、カテゴリーでの絞り込み」をご覧ください。
ただし、この便利な追加項目ですが、テンプレートでは値を評価することができません。判断できるのは「値があるか、ないか」のみです。というかそもそも、テンプレートでif文を使えるようにするには、「NP_if」が必要です。しかし、このプラグインで判断できる項目は、Nucleus標準の「タイトル」「本文」「カテゴリー」などだけです。
ということで、NP_ifに手を入れて、NP_znItemFieldEXの拡張項目の値を評価できるようにしました。NP_ifのdoIf関数内を下記のようにごそっと変更してみてください。「<custom code>…</custom code>」が変更箇所です。
function doIf($name='',$value=''){
if (!$this->item) return false;
// Original if (!isset($this->item->$name)) return false;
// Original return $this->item->$name==rawurldecode($value);
/* <custom code> */
if (!isset($this->item->$name)) {
global $manager;
$itemid = $this->item->itemid;
if ($manager->pluginInstalled('NP_znItemFieldEX') and $plugin = &$manager->getPlugin('NP_znItemFieldEX')) {
$name = $plugin->getItemFieldEX($itemid, $name);
if ($value == '[date]') {
$today = date('Y-m-d');
if ($name < $today) {
return false;
} else {
return true;
}
}
return $name==rawurldecode($value);
} else {
return false;
}
} else {
return $this->item->$name==rawurldecode($value);
}
/* </custom code> */
}
すると、
<%if(if,name,ギター)%>ギターです。<%else%>ギターじゃないです<%endif%>
とか、
<%if(if,date,[date])%>本日開催!<%endif%>
てな感じで使用できます。
簡単に解説すると、まず大前提としてNP_znItemFieldEXがインストールされているのか調べています。インストールされていれば、そのアイテムの拡張項目の値を引っ張ってきて、条件と照らし合わせている訳ですね。
ちなみに「[date]」はスキンと同じように「本日」の判断をさせたかったので追加しております。お気づきかもしれませんが、この比較だと記事にアクセスがあった時に本日以前、つまり今日か過去になっていれば「false」、未来なら「true」を返してif文の中に記述されたこと表示します。
比較方法を追記したり、いろいろ変えたりすれば、もっといろんな評価ができるようになると思います。
最後に大事な事を。NP_ifのページにも記述されていますが、テンプレート内のif文は表示させないだけで実際はその処理を行うので、あまり付加が高そうな処理は書かないほうが無難です。
2010-07-16 Fri by pushman - Category: Nucleus
Keyword: NP_znItemFieldEX / NP_if
Comment: 0 - TrackBack: 0
« Old 2010-05-20
NP_znItemFieldEX|PHP 5で検索機能を有効にする
2010-08-07 New »
続・NP_znItemFieldEXとNP_ifの連携