エントリ一覧に連番を振って表示する方法

CMS Designerを「こんな風に使ってます」等の活用事例や、自分なりのTIPS等のご報告をお待ちしています。
返信
webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

エントリ一覧に連番を振って表示する方法

投稿記事 by webmaster » 2005年6月21日(火) 09:21

 webmasterです。
 エントリ一覧に、先頭から順に1,2,3...と連番を振って表示したい時があるかと思います。

 この場合、エントリ一覧のデザイン定義に次の呪文を埋め込んでください。

コード: 全て選択

<xsl:value-of select="position()+((/entrylist/navi/@position)-1)*(/entrylist/navi/@maxpagerows)" />
 但しこの連番は、エントリ一覧でのみ表示できるもので、エントリ1件のデザイン
では使えません。また、連番は表示時に確定するものであり、各エントリに対して
恒久的につけられた番号ではありません。
 よって、例えば「作品No.」としてこの連番を使おうとすると、一覧画面では使えても
詳細画面では使えない事になります。あくまで一覧表示時の連番用とお考え下さい。
 (エントリのユニークな番号としては、エントリIDが最適です。)

 結果だけ欲しい人はこれでOKです。

 以下、興味がある方への解説です。

 1ページ内に全エントリを表示する場合は、単純に次の方法で連番を表示できます。

コード: 全て選択

<xsl:value-of select="position()" />
 position()はXSLTの命令で、「同じ要素が繰り返し現れる場合に、現在の要素の位置を取得する」というものです。
 CMSDの出力ではentry要素が繰り返し現れるので、entry要素の位置、つまりエントリに対する連番になるわけです。

 しかし、ページ切替をする場合には、単純にposition()ではうまくいきません。
 なぜならposition()は、今表示されている分に対してしか適用されない為です。つまり、全てのページが1から連番が振られてしまいます。
 考え方としては、1ページ当たり10件表示するとして、position() の値に、2ページ目ならば+10、3ページ目なら+20、4ページ目なら+30....としていけば、正しく連番が振られる事になります。

 これを式で表すと、次のようになります。

 連番 = position() + ( 現在のページ数 - 1 ) × ( 1ページ毎の最大表示件数 )

 さらにこれをXSLTの式で表したが下のxsl:value-of要素です。

コード: 全て選択

<xsl:value-of select="position()+((/entrylist/navi/@position)-1)*(/entrylist/navi/@maxpagerows)" />
 現在のページ数は、navi要素のposition属性に入っています(position()命令とposition属性が名前が同じなのはたまたまで、何の関連もありません)。
 1ページ毎の最大表示件数は、同じくnavi要素のmaxpagerows属性に入って
います。

返信