2010-07-16 Fri

NP_znItemFieldEXとNP_ifの連携

もう何度も書いておりますが、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: /
Comment: 0 - TrackBack: 0

このページの先頭に戻る

「NP_znItemFieldEXとNP_ifの連携」へのツイート

「NP_znItemFieldEXとNP_ifの連携」へのトラックバック

TrackBack URL:

「NP_znItemFieldEXとNP_ifの連携」へのコメント





このページの先頭に戻る