現在日時の前後でページの振り分け

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
az
記事: 4
登録日時: 2006年10月05日(木) 11:42

現在日時の前後でページの振り分け

投稿記事 by az » 2007年2月08日(木) 13:06

新機能、「現在日時を取得する」、大変うれしい機能で、早速使わせていただいております。

が、少し気になるところが出てきました。

やりたいことは、イベント情報のページ振り分けです。

1.現在の日にちより後(未来)のイベントを「entry_list.php」に表示させ、
 現在の日にちより前(終了分)のイベントを「entryfinish_list.php」に表示させる。
2.上記のそれぞれのページで、例えば「rows="5"」とし、5件ずつ表示させる。

1.は、xsl書類を2つ作成し、
 未来のもの:「event.list.contents.design.xsl」を「entry_list.php」に適用。
 終了分のもの:「event.list.contentsfinish.design.xsl」を「entryfinish_list.php」に適用。
未来の「event.list.contents.design.xsl」の方は、

コード: 全て選択

<xsl:if test="floor((day/@time - /*/today/@time) div (60*60*24)) >= 0">
 hogehoge
</xsl:if>
で現在より後の物だけピックアップするようにしています。
 終了分の方のxslを同様に終了分のものだけピックアップしています。

ここまではできたのですが、
2.の「rows=〜」を指定すると、例えば終了分のページを見ると表示される件数がおかしいのです。
探っていくと、どうやら、上記のxsl:ifではじいたエントリも、「rows〜」で指定した件数にカウントされているようです。
例えば、「未来」のエントリが4件あったとします。
そこで「終了分」のページの「rows」を「5」にすると、
「終了分」のページの1ページ目は、エントリが1件しか表示されません。
 →(rowsの)5-(本来はカウントされない「未来」分の)4=1というふうになっています。


今日より前か後かでページを分けたいとき、
考え方はそもそもこれでよいのでしょうか…。
もし、やり方が違うなら、
何か他にうまいやりかたがあるでしょうか。

よろしくお願いします。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 現在日時の前後でページの振り分け

投稿記事 by webmaster » 2007年2月08日(木) 21:53

 azさん、さっそく新機能を活用して頂きありがとうございます。

 ご指摘の通り、rowsで指定した「件数」は、XSL側でxsl:ifなどを使ってエントリを
取捨選択する「前」の件数になります。

 rowsはCMSDがXSLに渡す件数であって、XSL側でそれをさらに取捨選択すれば、
表示される件数はrowsより小さい件数になってしまいます。

 azさんが実現されたい、「現在日時より未来のイベントを5件表示」というような処理を
実現する最も確実な方法は、rows="99999"などのように全件をXSL側に渡し、
条件に合致するエントリが5件になった時点で表示をやめる、というものです。
 (サンプルを作る時間が取れない為、サンプルの提示はご容赦下さい。ただ、ある程度
のXSLTの知識を必要とするかと思います。)

 ただこの方法は(ご想像の通り)毎回のページ・リクエストの度に全件読み込みが発生
してしまう為、パフォーマンス的にあまりよろしくありません。

 カレンダー的な情報を扱おうとすると、どうしても現在のCMSDには限界が生じて
しまいます。良い方法を検討し、今後のバージョンアップに繋げたいと思います。

 その他ご不明な点がございましたら、いつでもご質問下さい。

az
記事: 4
登録日時: 2006年10月05日(木) 11:42

Re: 現在日時の前後でページの振り分け

投稿記事 by az » 2007年2月08日(木) 23:06

早速のご返答ありがとうございます。
 ご指摘の通り、rowsで指定した「件数」は、XSL側でxsl:ifなどを使ってエントリを
取捨選択する「前」の件数になります。

 rowsはCMSDがXSLに渡す件数であって、XSL側でそれをさらに取捨選択すれば、
表示される件数はrowsより小さい件数になってしまいます。
やはりこういうことだったのですね。

CMSD,XSL、それぞれの関係性とかっていうものがまだよくわかってないので
試してみて現象を確かめるという感じでやっております。
 azさんが実現されたい、「現在日時より未来のイベントを5件表示」というような処理を
実現する最も確実な方法は、rows="99999"などのように全件をXSL側に渡し、
条件に合致するエントリが5件になった時点で表示をやめる、というものです。
現在は、ちょっと考え方を変えて、
過去の分なら2ヶ月以内のものだけ表示して、後は切り捨てる、というやり方に変えました。
(要は1ページに何十個もリストされるのもキツい、というのが元々だったので、
 古い情報は切り捨てる方向にしました。)

ただ、XSL…というかそもそもXSLとかその概念から勉強しなきゃいけなくなってきたと
感じてきたところですし、掲示してくださったやり方を
一度探って試してみようかと思います。
ありがとうございました。
またこの機能について何か出てくるかもしれませんがその時はまた質問させてください。

使う側に知識とアイデアは必要だけど、
CMSDは考え方次第でいろいろできそうだと感じています。
今後もこういった何かのベースとなる機能の充実に期待しています。

返信