ページ切り替えスイッチのカスタマイズについて

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

ページ切り替えスイッチのカスタマイズについて

投稿記事 by bcacsato » 2007年11月22日(木) 19:07

例えば月替わりランチメニューなど、月替わりのページを作成したいと思っています。
そのため、ページ切り替えスイッチも「次のエントリへ」「前のエントリへ」ではなく、
「12月のメニューへ」などのような形にしたいと思います。

そこで、
<xsl:value-of select="@month+1" />月のメニュー
のようにしてみましたが、データの部分は表示されず、「月のメニュー」となってしまいます。

これに限らず、ページ切り替えスイッチ中に含めたデータ項目は表示されないようですが、
ページ切り替えスイッチ中にはデータ項目は埋められないのでしょうか?


あるいは、前後のエントリのタイトルを取得し、
「12月のランチメニュー ○○定食へ」などといった風にもしたいのですが、
前後のエントリのデータを取得することは可能でしょうか?

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

Re: ページ切り替えスイッチのカスタマイズについて

投稿記事 by webmaster » 2007年11月23日(金) 17:15

 bcacsatoさん、いつもありがとうございます。

 @monthは、本来は /entry/@month を省略したもので、

コード: 全て選択

<xsl:for-each select="entry">
  <xsl:value-of select="@month" />月
</xsl:for-each>
 のように、entryが選択(select)された状態ですと、entryがカレント要素に
なる為、「@month」のように省略して書く事ができるようになっております。

 この為、このfor-eachの外ですと、@monthと書いても /entry/@monthを
取得することができない、というのが今回の現象かと思います。

 この場合は、

コード: 全て選択

<xsl:value-of select="/entry/@month" />
 のように、ルートからのフルパスで指定して頂くと、取得可能です。

 これはエントリ1件のデザインの場合で、エントリ一覧(entrylist)のデザイン
の場合には、entry要素が複数存在しますので上記の方法は使用できません。
 エントリ一覧の場合に同様のことをしたい場合には、「1件目のエントリ」の
ようにエントリを選択し、次のように記述してください。

コード: 全て選択

<xsl:value-of select="/entrylist/entry[1]/@month" />
 少々高度な利用方法になりますが、ご希望の内容のお役に立てれば幸いです。

 回答がズレておりましたら、お手数ですが再度ご連絡をお願いいたします。m(__)m

bcacsato
パワーユーザー
記事: 234
登録日時: 2005年11月27日(日) 14:05

投稿記事 by bcacsato » 2007年11月24日(土) 10:20

説明不足で失礼しました。
前後を省略してソースを載せてしまいましたが、
実際には下記の通り、for-eachの中に入れております。

コード: 全て選択

<xsl:for-each select="navi">
 <xsl:for-each select="prev"><a href="{@href}"><xsl:value-of select="@month-1" />月</a></xsl:for-each>
 <xsl:for-each select="next"><a href="{@href}"><xsl:value-of select="@month+1" />月</a></xsl:for-each>
</xsl:for-each>
今回は、エントリ一覧のデザインを使って、1ページに1エントリという形で使ってました。
そのため、webmaster様のご指示の通り、[1]を使って、

コード: 全て選択

<xsl:for-each select="navi">
 <xsl:for-each select="prev"><a href="{@href}"><xsl:value-of select="/entrylist/entry[1]/@month-1" />月</a></xsl:for-each>
 <xsl:for-each select="next"><a href="{@href}"><xsl:value-of select="/entrylist/entry[1]/@month+1" />月</a></xsl:for-each>
</xsl:for-each>
のようにやってみたところ、ちゃんと「12月」と表示されました!
が、12月のページに行くと、「11月」とは表示されず「月」となっています…。
「pageno=2」だから[2]にしなきゃないのかと思い、

コード: 全て選択

<xsl:for-each select="navi">
 <xsl:for-each select="prev"><a href="{@href}"><xsl:value-of select="/entrylist/entry[2]/@month-1" />月</a></xsl:for-each>
 <xsl:for-each select="next"><a href="{@href}"><xsl:value-of select="/entrylist/entry[1]/@month+1" />月</a></xsl:for-each>
</xsl:for-each>
のようにしてみましたが、変わらずです。

何か手順が間違ってますでしょうか?すいませんが、ご指示お願いいたしますm(_ _)m

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

投稿記事 by webmaster » 2007年11月24日(土) 12:21

 bcacsatoさん、やはり回答がズレていたようで申し訳ありません。

 @month-1を、@month - 1 のように、-の両側にスペースを入れるとどうでしょう?

 同様に、+の両側にもスペースを入れてみてください。

 「month-1」という名前の属性を探しにいって、存在しない為空白になっている
可能性があるかと思います。

 尚、デザイン定義には表示される件数分のデータしか与えられない為、1ページ1件
にしている場合には、entry[2]とやるとエントリが選択されません。常に[1]でOK
です。

 ところで、1ページ1件でのページ切替をする場合は、ページ切替ではなく
「エントリ切替」の手法をご利用頂いた方がシンプルかもしれません。
 詳しくはリファレンスマニュアル「5.5.9 「次のエントリへ」「前のエン
トリ」へのリンクをつける」をご覧下さい。

bcacsato
パワーユーザー
記事: 234
登録日時: 2005年11月27日(日) 14:05

投稿記事 by bcacsato » 2007年11月24日(土) 13:36

なるほど!空白を入れたら大丈夫でした :lol:

今回は1ページ内にコンテンツをもう1つ埋め込んでいるのですが、例えば、

コード: 全て選択

<cmsd:entry name="content" design="detail" />
<cmsd:entry name="sub-content" design="detail" />
のようにすると、なぜかページスイッチが表示されないのです。

しかし、

コード: 全て選択

<cmsd:entrylist name="content" design="list" rows="1" />
<cmsd:entry name="sub-content" design="detail" />
このようにすると、ページスイッチが現れるため、この方法をとりました。

それと、最初の質問の後半、
あるいは、前後のエントリのタイトルを取得し、
「12月のランチメニュー ○○定食へ」などといった風にもしたいのですが、
前後のエントリのデータを取得することは可能でしょうか?
も急ぎませんので、教えてくださいませm(_ _)m

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

投稿記事 by webmaster » 2007年11月27日(火) 16:24

webmasterです。bcacsatoさん、いつもありがとうございます。

マニュアルでは目立たないのですが、cmsd:entryタグでは、エントリ切替用
ナビゲーションを表示するために、

コード: 全て選択

<cmsd:entry name="xxx" design="xxx" [color=red]navigation="on"[/color] />
のように、navigation属性を指定する必要があります。

これは、一般的にエントリ切替ナビゲーションが表示されるケースは稀で、
エントリ切替ナビゲーションを表示する為には多少サーバに負荷がかかる為です。
(負荷といっても、エントリ一覧を表示するのと同程度の負荷です)

逆にエントリ一覧(cmsd:entrylist)では、ページ切替ナビゲーションの
表示を

コード: 全て選択

<cmsd:entrylist name="xxx" design="xxx" navigation="off" />
で、消す事ができます。これによって多少負荷が軽減されます。
エントリ一覧の場合、多くのケースでページ切替ナビゲーションが表示される事が
予想される為、デフォルト値が「on」になっています。
あるいは、前後のエントリのタイトルを取得し、
「12月のランチメニュー ○○定食へ」などといった風にもしたいのですが、
前後のエントリのデータを取得することは可能でしょうか?
も急ぎませんので、教えてくださいませm(_ _)m[/quote]

申し訳ありません、このご質問への回答を失念しておりました。m(__)m
前後のエントリデータの取得は現在サポートしていない為、ご希望のことは
実現できないかと思います。重ねて申し訳ありません。

返信