Webmaster様、お世話になります。
エントリー数が増えると動的ページも増えますが、
ページ切替ナビで1Pずつ移動するのではなく、
たとえばセレクトメニューなどを使って、目当てのページ番号にジャンプすることは
できますか?
あるいは一度絞り込み表示がされてから、さらにそこからセレクトメニューで
グループ絞込みをすることはできますか?
上記のどちらかが実現できると、サイト訪問者には使いやすくなるのではと
考えています。
動的ページへのジャンプ機能
目当てのページへの直接ジャンプ
webmasterです。key-koさん、いつもありがとうございます。
目当てのページへの直接ジャンプ機能は、以下のようにして実現可能です。
通常、ページ切り替えナビゲーションのデザイン定義では以下のような感じに
なっていると思います。
実は、CMSDから出力されるnavi要素の中には、上記のprev要素とnext要素
以外にも「page」という要素がページ数分出力されています。
よって、デザイン定義を次のように書けば、ページ数分、各ページへの直接リンクが
表示されます。
現在のページについてはリンクしないという場合は、次のようなifを追加します。
(現在のページについてはリンクではなく太字にします)
この辺、まだマニュアルには記載されていない機能ですので、ぜひお試し頂いて
ご要望など挙げて頂けると助かります。m(_ _)m
目当てのページへの直接ジャンプ機能は、以下のようにして実現可能です。
通常、ページ切り替えナビゲーションのデザイン定義では以下のような感じに
なっていると思います。
コード: 全て選択
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><<前のページへ</a>|
</xsl:for-each>
<xsl:for-each select="next">
<a href="{@href}">次のページへ>></a>
</xsl:for-each>
</xsl:for-each>
以外にも「page」という要素がページ数分出力されています。
よって、デザイン定義を次のように書けば、ページ数分、各ページへの直接リンクが
表示されます。
コード: 全て選択
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><<前のページへ</a>|
</xsl:for-each>
<xsl:for-each select="page">
<a href="{@href}"><xsl:value-of select="@id" /></a>|
</xsl:for-each>
<xsl:for-each select="next">
<a href="{@href}">次のページへ>></a>
</xsl:for-each>
</xsl:for-each>
(現在のページについてはリンクではなく太字にします)
コード: 全て選択
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><<前のページへ</a>|
</xsl:for-each>
<xsl:for-each select="page">
<xsl:if test="../@position=@id">
<strong><xsl:value-of select="@id" /></strong>|
</xsl:if>
<xsl:if test="not(../@position=@id)">
<a href="{@href}"><xsl:value-of select="@id" /></a>|
</xsl:if>
</xsl:for-each>
<xsl:for-each select="next">
<a href="{@href}">次のページへ>></a>
</xsl:for-each>
</xsl:for-each>
ご要望など挙げて頂けると助かります。m(_ _)m
googleのようなページ切り替え番号一覧を出力する
webmasterです。
確かにこのやり方ですと、ページ数がたくさんになると、折り返しが生じてしまい
ますね・・・。
googleという良い例を教えて頂いたので、同じ処理をXSLTで実現してみました。
ただ、googleの場合は現在のページから前後10ページずつリンクを表示して
いますが、ちょっと多い気がするのでこの例では前後5ページ分を出しています。
page要素部分のデザイン定義を以下のようにしてみてください。
前回の例に対して、
<xsl:if test="(@id>=(../@position - 5)) and (@id<=(../@position + 5))">
で囲ってあります。
このif文はリンク先のページ番号(@id)と、現在のページ番号(../@position)を
比較して、「ページ番号 ≧ 現在のページ番号 - 5」且つ(and)、「ページ番号 ≦ 現在のページ番号 + 5」
ならば表示するようにしています。
表現を変えると、
現在のページ番号 - 5 ≦ ページ番号 ≦ 現在のページ番号 + 5
という感じです。
現在のページ番号が10ならば、10-5=5ページ目から、10+5=15ページ目まで
のページ切り替えリンクが表示されます。
ナビ表示部分のXSLT全体は次のようになります。
数字を変えたりすると条件を変更できますので、いろいろいじってみてくださいませ。
またご不明点、ご要望などありましたらご連絡頂ければ幸いです。
確かにこのやり方ですと、ページ数がたくさんになると、折り返しが生じてしまい
ますね・・・。
googleという良い例を教えて頂いたので、同じ処理をXSLTで実現してみました。
ただ、googleの場合は現在のページから前後10ページずつリンクを表示して
いますが、ちょっと多い気がするのでこの例では前後5ページ分を出しています。
page要素部分のデザイン定義を以下のようにしてみてください。
コード: 全て選択
<xsl:for-each select="page">
<xsl:if test="(@id>=(../@position - 5)) and (@id<=(../@position + 5))">
<xsl:if test="../@position=@id">
<strong><xsl:value-of select="@id" /></strong>|
</xsl:if>
<xsl:if test="not(../@position=@id)">
<a href="{@href}"><xsl:value-of select="@id" /></a>|
</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:if test="(@id>=(../@position - 5)) and (@id<=(../@position + 5))">
で囲ってあります。
このif文はリンク先のページ番号(@id)と、現在のページ番号(../@position)を
比較して、「ページ番号 ≧ 現在のページ番号 - 5」且つ(and)、「ページ番号 ≦ 現在のページ番号 + 5」
ならば表示するようにしています。
表現を変えると、
現在のページ番号 - 5 ≦ ページ番号 ≦ 現在のページ番号 + 5
という感じです。
現在のページ番号が10ならば、10-5=5ページ目から、10+5=15ページ目まで
のページ切り替えリンクが表示されます。
ナビ表示部分のXSLT全体は次のようになります。
コード: 全て選択
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><<前のページへ</a>|
</xsl:for-each>
<xsl:for-each select="page">
<xsl:if test="(@id>=(../@position - 5)) and (@id<=(../@position + 5))">
<xsl:if test="../@position=@id">
<strong><xsl:value-of select="@id" /></strong>|
</xsl:if>
<xsl:if test="not(../@position=@id)">
<a href="{@href}"><xsl:value-of select="@id" /></a>|
</xsl:if>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="next">
<a href="{@href}">次のページへ>></a>
</xsl:for-each>
</xsl:for-each>
またご不明点、ご要望などありましたらご連絡頂ければ幸いです。
最後に編集したユーザー webmaster on 2005年6月02日(木) 12:59 [ 編集 1 回目 ]