Dittoでイベントのリストで 公開終了するには?

プログラム(機能)関連の開発の話題
アバター
rishii
メンバー
メンバー
記事: 22
登録日時: 2010年4月27日(火) 23:23

Dittoでイベントのリストで 公開終了するには?

投稿記事by rishii » 2010年10月29日(金) 02:46

Dittoを使って、トップページにイベントのリストを作りたいと思います。
イベント日時までリストが掲載されていて、翌日に削除され、同じページの別な場所のDittoへ、終了イベントとして掲載したいのですが。リストからイベントが終わっても外し方がわからないので、お教えいただけますか?

新着情報とは少し違って、予定リストで、終了すると 下のリストへ移動させるものです。
詳細ページに公開終了はあるのは分かっておりますが、他へ移すために [*DispDate*]という
テンプレート変数を使って日時を表記させております。

■TOP ditto予定リスト 表示3件
親フォルダー
イベント A ●月●日 詳細ページ
イベント B ●月●日 詳細ページ
■TOP ditto終了リスト 表示3件
以下同じ


■トップのDitto
[!Ditto? &id=`inno` &config=`inno` !]

■inno.config.php
<?php
$id='inno';
$parents='118';
$depth='1';
$display='2';
$showInMenuOnly='1';
$hideFolders='1';
$sortBy='editedon';
$tpl='inno';
?>

■チャンク inno
<dt>[+DispDate+]</dt><dd><a href="[~[+id+]~]">[+introtext+]</a></dd>

説明が下手で伝わってないかとおもいますが、イベントの次の日に リストから落として
次の終了リストへ 送りたいのですが、書き方をお教え願いたいのです。
よろしくお願いします。
kazuike
メンバー
メンバー
記事: 480
登録日時: 2009年8月12日(水) 12:53

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by kazuike » 2010年10月29日(金) 03:45

Dittoのfilterパラメータを使って、現在時刻と比較して絞り込めば良いと思います。
具体的には、以下のような感じかと

▼予定リスト(予定時刻≦現在時刻)
[!Ditto? &id=`inno` &config=`inno` &filter=`DispDate,@EVAL return time();,5`!]

▼終了リスト(予定時刻>現在時刻)
[!Ditto? &id=`inno` &config=`inno` &filter=`DispDate,@EVAL return time();,4`!]

※条件モードの番号(4、5)は、未確認です。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by sama55 » 2010年10月29日(金) 10:43

kazuike さんが書きました:※条件モードの番号(4、5)は、未確認です。

5と6の指定は下の記事が参考になるかもしれません。
http://modxcms.com/forums/index.php/top ... #msg188581
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by min-o » 2010年10月29日(金) 15:36

>rishii さん
ちょうどそうゆうページを作ったのでお知らせします。
http://home.cybergadget.co.jp/index.php?id=974

それぞれのDittoコールののfilterパラメータで
イベント終了時間より前

コード: 全て選択

&filter=`EventEndTime,@EVAL return time();,3`

イベント終了時間すぎたら

コード: 全て選択

&filter=`EventEndTime,@EVAL return time();,4`

でうまくいきました。

テンプレート変数EventEndTime は
入力タイプ:Date
ウィジェット:Unixtime
にしています。
アバター
rishii
メンバー
メンバー
記事: 22
登録日時: 2010年4月27日(火) 23:23

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by rishii » 2010年10月29日(金) 18:04

>kazuikeさん >sama55さん >min-oさん
資料ありがとうございました。
Dittoのfilterパラメータの使い方が分かってきました。
Sama55さんの修正を入れ込みました。


しかし書き方が悪いのかどうもうまく表示しておりません。
サンプルサイトを見ていただきたいのですが、相手方の場所なので、見せられずにすみません。

出来ていないことが二つあって、イベントが変わらないこととソートがうまくいってないのです。
少し仕様を変えたので、変なところがあったら教えてほしいのですが。

まず、テンプレート変数の DispDate
入力タイプ Date ウィジット Date Formatter パラメーター %Y-%m-%d

■チャンク innovationは変わらずで
<dt>[+DispDate+]</dt><dd><a href="[~[+id+]~]">[+introtext+]</a></dd>

閲覧場所に
[!Ditto? &config=`inno` &filter=`DispDate,@EVAL return time();,4`!]
4以外にも 5 とか 3とかやってみました、

下記はinno.config.php
<?php
$id='inno';
$parents='118';
$depth='1';
$display='3';
$showInMenuOnly='1';
$hideFolders='1';
$sortBy='DispDate'; //ここがおかしいのかな?
$sortOrder='DESC'; //
$tpl='innovation';
?>

詳細ページの DispDate へは 2011/01/17 時間というようにカレンダーから入力済み

出力結果は
2011-01-17 dd部分 //B 下に
2010-11-16 dd部分 //A 次のイベントは上に
2010-10-27 dd部分 //2日前なので出力しない

なにか基本的に間違ってそうなんですがお願いします。
kazuike
メンバー
メンバー
記事: 480
登録日時: 2009年8月12日(水) 12:53

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by kazuike » 2010年10月29日(金) 18:41

min-oさんが書いているように、
ウィジェット:Unixtime
でないと、数値として大小比較ができないので、
DispDateのウィジェットをUnixtimeに変更します。

このままだと、[+DispDate+]は意味不明の数字が表示されるので、
Dittoの「dateSource」パラメータと「dateFormat」パラメータを使って、
inno.config.phpに以下を追加
--------
$dateSource = 'DispDate';
$dateFormat = '%Y-%m-%d';
--------
これで、Dittoのカスタムプレイスフォルダ[+date+]が使えるようになるので、
チャンクの[+DispDate+]を[+date+]に代えて
--------
<dt>[+date+]</dt><dd><a href="[~[+id+]~]">[+introtext+]</a></dd>
--------
でどうでしょう。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
rishii
メンバー
メンバー
記事: 22
登録日時: 2010年4月27日(火) 23:23

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by rishii » 2010年10月29日(金) 19:05

>kazukiさん ご迷惑かけてます。
ご連絡ありがとうございます。

下記に変更しました。
<?php
$id='inno';
$parents='118';
$depth='1';
$display='3';
$showInMenuOnly='1';
$hideFolders='1';
$dateSource = 'DispDate';
$dateFormat = '%Y-%m-%d';
$tpl='innovation';
?>

[!Ditto? &config=`inno` &filter=`DispDate,@EVAL return time();,5`!]

チャンクを[+date+]に変更して
ウィジェット:Unixtimeにしたところ 、必要な項目のみ表示されるようになりましたが、
日付が真っ白で表示ができません。

すみません、分かっていなくて。
kazuike
メンバー
メンバー
記事: 480
登録日時: 2009年8月12日(水) 12:53

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by kazuike » 2010年10月29日(金) 19:50

すみません。
もしかしたら、DittoのdateSourceに は、テンプレート変数は使えなかったかもしれません。

いくつか方法はあると思いますが、
PHxで表示する方法では、こんな感じにチャンクを変更します。
--------
<dt>[+DispDate:date=`%Y-%m-%d`+]</dt><dd><a href="[~[+id+]~]">[+introtext+]</a></dd>
--------

その他、チャンクの日付の箇所にスニペットを使う方法等もあるかと思います。
例)DateTimeJP
viewtopic.php?f=7&t=352#p2701
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 480
登録日時: 2009年8月12日(水) 12:53

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by kazuike » 2010年10月29日(金) 19:54

書き忘れてましたが、
[+date+]を使わない場合、以下の2行は不要ですので、削除しておいてください。
--------
$dateSource = 'DispDate';
$dateFormat = '%Y-%m-%d';
--------
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
rishii
メンバー
メンバー
記事: 22
登録日時: 2010年4月27日(火) 23:23

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by rishii » 2010年10月29日(金) 20:54

> kazuike さん
出来ました。きちんと表示しています。
なんとお礼を言ったらいいか。ありがとうございました。

Dittoは新着情報だと簡単にできるのですが、このようにFilterを使ったり様々な事ができるんですね。
お騒がせしてすみませんでした。
min-oさん sama55さんにも感謝しております。
結果的には
[!Ditto? &config=`inno` &filter=`DispDate,@EVAL return time();,3`!]
<dt>[+DispDate:date=`%Y-%m-%d`+]</dt><dd><a href="[~[+id+]~]">[+introtext+]</a></dd>
という形となり、今日以前は表示しなくなり
時系列 上から一番近い順番で並べる事ができました。

一つだけ教えてください。
今は時系列でOKなのですが、ソートの順番を逆にはできるのでしょうか?
$sortBy='DispDate'; //←ここには入れられないですよね?
kazuike
メンバー
メンバー
記事: 480
登録日時: 2009年8月12日(水) 12:53

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by kazuike » 2010年10月29日(金) 21:15

逆順(昇順)にするときは、
$sortDir='ASC';
です。

このあたり、手前味噌ですが、以下に簡単にまとめてます。
▼DittoのorderByパラメータによる、複数フィールドを使った並べ替え(ソート)
http://d.hatena.ne.jp/hikidas_ikeda/20090528/1243501085
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
rishii
メンバー
メンバー
記事: 22
登録日時: 2010年4月27日(火) 23:23

Re: Dittoでイベントのリストで 公開終了するには?

投稿記事by rishii » 2010年10月29日(金) 21:31

わかりました。いろいろありがとうございました。 ;)