NP_znItemFieldEX|「本日」の条件判断を修正

NP_znItemFieldEX|「本日」の条件判断を修正

Author : pushman|Nucleus|2008-02-14 Thu 13:17

NP_znItemFieldEXはスキンに

<%znItemFieldEX(モード,ソートキー,昇降順,摘出条件,テンプレート,表示数,別ブログid,allCategory)%>

と記述する事で、Nucleus標準変数の「<%blog%>」と同じようにアイテム群を表示できます。

特にありがたいのが抽出条件の「[date]」。これはページが開かれた日時を取得する機能で、例えば拡張フィールド「end」を「DateTime」で作成しイベント終了日を入力。そしてスキンに

<%znItemFieldEX(index,start,ASC,start|>=|[date]||end|>=|[date],default,10,1,1)%>

と記述すれば、ブログIDが「1」の全てのカテゴリーの記事を、イベント開催日の近い順番で「default」テンプレートを使用して10件表示してくれます。そして、イベント終了日の翌日になれば自動的に非表示になります。

と思っていたのですが、このままだとイベント当日になると非表示になります。原因は拡張フィールド「DateTime」の設定です。

拡張フィールドを「DateTime」タイプで作成するとデフォルト設定は

2005-12-24

となっています。なので、記事登録の際のフォーマットも

0000-00-00

となっています。そこで、例えばイベント終了日が2008年2月1日だった場合、

2008-02-01

と入力しますが、これは内部的に

2008-02-01 00:00:00

となります。

そして、2月1日を迎えた1秒後以降にアクセスすると「[date]」は

2008-02-01 00:00:01

となり、記事が持っている拡張フィールド「end」は

2008-02-01 00:00:00

なので、

end|>=|[date]

は成り立ちません。なので、非表示になるわけですね。

まず最初にしたのは拡張フィールドの設定を

2005-12-24 23:59:59

にして、記事入力の際に時間まで入力する事でした。が、はっきりいってこれはめんどくさい。ということで、NP_znItemFieldEX.phpを修正しました。

skinIndexMode関数内、1490行目あたりに条件を設定している箇所がありますが、[date]も以下のような式で生成されています。

$provisoValue = ($provisoValue == '[date]') ? date('Y-m-d H:i:s') : $provisoValue;

このなかの「date('Y-m-d H:i:s')」を「date('Y-m-d')」とし、以下のようにします。

$provisoValue = ($provisoValue == '[date]') ? date('Y-m-d') : $provisoValue;

そして、元と同じように時間も条件に含めるために、新たに「[datetime]」を追加します。

$provisoValue = ($provisoValue == '[datetime]') ? date('Y-m-d H:i:s') : $provisoValue;

とします。

以上で「[date]」は「2008-02-01」となりめでたくイベント当日も表示されます。しかしほんとに便利なプラグインです。作者の佐藤(な)さん、ありがとうございます。

Tag(s): NP_znItemFieldEX

Comment Form (policy)

(メールアドレスは非公開です)

Others
Newest 5 Items

NP_znItemFieldEX|「本日」の条件判断を修正

NP_OnlyImg|高さを有効に

NP_TimeLimit|表示・非表示を指定

NP_znItemFieldEX|URLエンコードを追加

NP_ExtensibleSearch|検索HIT数を表示

Nucleus CMS: Pure Publishing