過去レスにあったものを実現したいのですがうまくいきません

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
NRG42543
アクティブユーザー
記事: 20
登録日時: 2009年1月26日(月) 21:26

過去レスにあったものを実現したいのですがうまくいきません

投稿記事 by NRG42543 » 2009年2月12日(木) 02:32

おせわになります。
過去レスに以下のものを見つけました。

http://cms.al-design.jp/phpbb/viewtopic ... ht=daysago

当日分のエントリのみを表示させるというものです。
これを実現したいのですが、うまくいきません。

リストのデザイン定義に、
<xsl:template match="/entrylist">
<xsl:if test="@daysago=0">
<xsl:for-each select="entry">
<a href="event.php{@href}"> [<xsl:value-of select="@date" />]
<xsl:value-of select="title" />
</a>
<br />
</xsl:for-each>
</xsl:if>
と記載していますが、結果、なにも表示されません。

各エントリの更新日時は、当日分、未来分、過去分と入力しており、
<xsl:value-of select="@daysago" />で@daysagoの計算状況を見ても、
当日分は0:00になっています。

なのに、表示されない。なぜでしょうか。よろしくお願いします。[/quote]

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2009年2月12日(木) 05:03

コード: 全て選択

<xsl:template match="/entrylist">

<xsl:for-each select="entry">

<xsl:if test="@daysago=0">
<a href="event.php{@href}"> [<xsl:value-of select="@date" />]
<xsl:value-of select="title" />
</a>
<br />
</xsl:if>

</xsl:for-each>

</xsl:template>
こんな感じ?

NRG42543
アクティブユーザー
記事: 20
登録日時: 2009年1月26日(月) 21:26

投稿記事 by NRG42543 » 2009年2月12日(木) 06:09

#やっと入れた;; なんかこのフォーラムうまく表示されない;;

tsuさん、たびたびありがとうございます。
できました!

ん〜ところで、ご相談なんですが、この表示のしかただと、あくまでも他の日付の
エントリが表示されないだけなので、未来日付のエントリがある場合に、上に空白が
できちゃうんですよね。

すると、TOPページなんかに、上位何項目かを表示みたいに設定していると、
うまく該当の日付が表示されないんですよね・・・

しかも、リスト一覧で表示すると、上にも下にも空白があってなんかカッコ悪。
真ん中に突然リンク出現みたいな。
これってうまくソートというか、表示させることできないもんでしょうか。

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2009年2月12日(木) 08:27

おはようござます。

 見るのが億劫になるフォーラムじゃ話にならんですね(苦笑)
なんとかしてほしいところですが、仕方ありません。


 空白が出来るということは、空のブロック要素か何か出力されてると受け止めてもいいでしょうか。

例えば

コード: 全て選択

<xsl:template match="/entrylist">
<ul>
<xsl:for-each select="entry">
<li class="xxxx">
<xsl:if test="@daysago=0">
<a href="event.php{@href}"> [<xsl:value-of select="@date" />]
<xsl:value-of select="title" />
</a>
<br />
</xsl:if>
</li>
</xsl:for-each>
<ul>
</xsl:template>
とか?

 ちょいと状況がよくわからんので、出力されてるソースでも見せていただけると助かります。

NRG42543
アクティブユーザー
記事: 20
登録日時: 2009年1月26日(月) 21:26

投稿記事 by NRG42543 » 2009年2月15日(日) 23:20

tsuさん、毎度ありがとうございます。

実はまだ書いていただいたソースを試していないんですが、こういうことです。

エントリには、過去日付のものや未来日付のものが混在している。
表示自体は、通常日付順でソートされるため、上から未来日付→過去日付の順に表示される。

今回のデザイン定義では、今日の日付のもの(@daysogo=0)のみ表示させるので、
未来日付や過去日付のものは表示されない。

つまり、

2009/03/01 表示されない
2009/03/01 表示されない
2009/03/01 表示されない
2009/02/15(今日)←これだけ表示される
2009/01/01 表示されない
2009/01/01 表示されない

これをページで表現すると、1ページの上から4行目に、2009/02/15(今日)だけが
表示され、そのほかのものは存在はするけれど、表示されないだけ。なのです。

これを、なんとか、今日のものだけ、上部に表示させるとか、させたいわけです。
なんかとてつもなくムリなことを言っているような気がするのですが・・・

伝わりますでしょうか?

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2009年2月16日(月) 10:17

NRG42543さん、こんにちは。

 一応伝わっているのですが、なぜに歯抜け現象が起きるのか謎です。
こちらで同じことを試して普通に今日の日付のみのエントリが上から順に表示されました。

単純にこんな記述で

コード: 全て選択

<ul>
<xsl:for-each select="entry">
<xsl:if test="@daysago=0">
<li>
<span>[<xsl:value-of select="concat('[',@year,'/',@month,'/',@day,']')" />]</span>
<xsl:value-of select="xxxxx" />
</li>
</xsl:if>
</xsl:for-each>
</ul>
今日のエントリ一覧
・[2009/02/16](今日の予定)
・[2009/02/16](今日の予定)

と表示されます。

 一度実際に使ってるデザイン定義と埋め込みファイルを見せていただけませんか?
どのようにして今の現象が起きているのか、というのが分からないと問題点が見えてきませんし。

NRG42543
アクティブユーザー
記事: 20
登録日時: 2009年1月26日(月) 21:26

投稿記事 by NRG42543 » 2009年2月16日(月) 20:18

Tsuさん、以下にデザイン定義と埋め込みコードを記載します。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entrylist">

<xsl:for-each select="entry">
<xsl:if test="@daysago=0">
<a href="event.php{@href}">
<xsl:value-of select="title" />
</a></xsl:if>
<br />
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>
▼埋め込みコード
<cmsd:entrylist name="event" design="default" rows="40" >
</cmsd:entrylist>
です。

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2009年2月17日(火) 11:00

こんにちは。

把握しました。

コード: 全て選択

<xsl:for-each select="entry">
<xsl:if test="@daysago=0">
<a href="event.php{@href}">
<xsl:value-of select="title" />
</a></xsl:if>
<br />
</xsl:for-each>
<xsl:fo-each>関数は与えられた条件のエントリを全て返しますので、この場合ですと、エントリの数だけ<br />が出力されてしまいます。
つまり出力ソースはこうなっているはずです。

コード: 全て選択

<br />
<br />
<a href="">日付タイトル</a><br />
<br />
<br />
<a href="">日付タイトル</a><br />
<br />
・
・
・
こんな感じ。

それで余計な改行というか空白行が出力されてるのです。
if文の中に入れることで無駄な<br />タグは出力されなくなります。
まぁ2番目のレスでずばり書いてあるのですが説明不足でしたね。

余計なお世話かもしれませんが、

コード: 全て選択

<cmsd:entrylist name="event" design="default" rows="40" />
group指定とかしないのであれば、この様に書いておくと良いかと思います。見た目もシンプルですし。

NRG42543
アクティブユーザー
記事: 20
登録日時: 2009年1月26日(月) 21:26

投稿記事 by NRG42543 » 2009年2月20日(金) 00:35

tsuさん。こんばんは。

なるほど!そういう意味でしたか。
確かに<br/>を消すと正常に表示されました。

何だろうこの<br/>・・・

ありがとうございます!ご迷惑おかけしました。

返信