2010-08-07 Sat

続・NP_znItemFieldEXとNP_ifの連携

先日「NP_znItemFieldEXとNP_ifの連携」に書いた通り、「NP_if」と「NP_znItemFieldEX」の連携に成功し、かなり柔軟なテンプレートを作成できたと喜んでいたのですが、NP_znItemFieldEXの拡張フィールドがチェックボックスの際に、条件判定ができなくなっていたので、四苦八苦して対応させる事に成功しました。

これ、むちゃくちゃハマってしまったのが、チェックボクスが持つ値と、拡張フィールドタイプの調べ方です。

NP_ifの「$name = $plugin->getItemFieldEX($itemid, $name);」で呼び出しているのは、拡張フィールドの値だけなのですが、タイプがチェックボックスの場合、値は選択されているものだけは無く、選択肢として登録されている全てのリストなのです。

具体的にいうと、チェックボックスに「Nucleus」「MovableType」「WordPress」という選択肢を設定し、ある記事で「MovableType」だけにチェックを入れても、呼び出される値「$name」は以下のようになります。

<li>Nucleus</li>
<li>MovableType</li>
<li>WordPress</li>

なのでテンプレートで

<%if(if,code,Nucleus)%>好きなCMS: Nucleus<%endif%>

と記述していると「$name==rawurldecode($value)」の結果は「false」となり思い通りの結果になりませんでした。なので、タイプがチェックボックスの場合、「その文字列が含まれるかどうか」を調べる方法で判定しないといけないのですが、値を引っ張ってきた時点ではタイプがテキストエリアなのか、チェックボックスなのかわからないのです。タイプは別のテーブルで管理されているので、さらに呼び出すのもなんか面倒なので、「チェックボックスタイプの値には行頭に<li>が存在する」という点に着目してできたのが、以下のコードです。

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;
                }
            }
            if (strpos($value, "
  • ") == false) { $result = strpos($name, $value); if ($result === false) { return false; } else { return true; } } return $name==rawurldecode($value); } else { return false; } } else { return $this->item->$name==rawurldecode($value); } /* </custom code> */ }
  • おそらくこれで、タイプがなんであれNP_ifで判定できると思います。

    Keyword: / /

    2010-08-07 Sat / Author - pushman / Nucleus / Comment - 0 / TrackBack - 0

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

    TrackBack URL:

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





    このページの先頭に戻る