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

