ページ 1 / 1
ページ番号付きのナビ
Posted: 2006年12月08日(金) 16:07
by ifeel
こんにちは。
いつもお世話になっております。
http://cms.al-design.jp/phpbb/viewtopic.php?t=130
を見て、ナビゲーションをページ番号付きにして
prev 1 | 2 | 3 next
のようにしたのですが、この場合ページが1ページしかないと
1|
と表示され、ちょっと間が抜けた感じなので
「ページが1ページしかない場合は」
ページナビを非表示にしようと思ったのですが
この条件の記述方法がわかりませんでした。
ご教授いただけると幸いです。
Posted: 2006年12月08日(金) 16:34
by tsu
ifeelさん
ナビ機能は使ったこと無いのでよくわからないのですが、
コード: 全て選択
<xsl:if test="page<1">
<xsl:for-each select="page">
〜
</xsl:for-each>
</xsl:if>
こんな感じでpageをifでくくってみるのはどうでしょうか?
ありがとうございます
Posted: 2006年12月08日(金) 17:22
by ifeel
tsuさん
こんにちは。アドバイスありがとうございます。
試してみたのですが、ページ数が2ページ以降も
1 | 2 | 3
の部分が消えてしまうようでした。
「page」はそのページの番号を保持しているのでしょうか??
ページが全部で何ページあるのかを知るには・・・と悩み中です。
もしくは、1ページに10件表示、と決まっているので
エントリー総数を調べても良いかなと思って
<xsl:if test="count(entry)>10"></xsl:if>
でくくってみたり
countの中身を page、@id、スキーマ名
などなど闇雲に試しましたが上手く行きませんでした
もう少し色々試してみたいと思います。
Posted: 2006年12月08日(金) 18:05
by tsu
そのままやっても次の記事すら表示されません、、、、。
ナビの使い方もっと勉強しようと思います。
お役に立てず申し訳ないm(_ _)m
Posted: 2006年12月08日(金) 21:36
by blue
なんとなく、出来たっぽいのでお知らせします
コード: 全て選択
<xsl:for-each select="navi">
<xsl:if test="next">
<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:if>
<xsl:if test="not(next)">
</xsl:if>
</xsl:for-each>
うまく行ったように見えるのですが。どうでしょう??
Posted: 2006年12月09日(土) 00:12
by tsu
blueさん
私の書き方が悪いせいか、普通にナビが動作しないのですが。。。
問題の部分にすら辿り着けません。
埋め込みタグは普通に出力で問題ないですよね?
コード: 全て選択
<cmsd:entry name="test" design="test" />
xslt側は
コード: 全て選択
<xsl:template match="entry">
〜
<xsl:for-each select="navi">
<xsl:if test="next">
<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:if>
<xsl:if test="not(next)">
</xsl:if>
〜
</xsl:for-each>
</xsl:template>
とこんな感じで書けば普通に動作すると思い込んでいるのですが、、、。
Posted: 2006年12月09日(土) 18:08
by blue
tsuさんこんにちは。
埋め込みタグは、
コード: 全て選択
<cmsd:entrylist name="test" design="test" />
になるかと思います。
まちがいです!
Posted: 2006年12月09日(土) 20:50
by blue
申し訳ないです。昨日投稿したコードは間違いでした。
表示されたページナビの、最終ページを表示させた場合も、ページナビが消えてしまいます。
もちっと方法を考えてみます。。
結局・・・
Posted: 2006年12月09日(土) 21:54
by blue
度々すみません。
コード: 全て選択
<xsl:for-each select="navi">
<xsl:choose>
<xsl:when test="next">
<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:when>
<xsl:when test="prev">
<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:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
なんかベタな気もするんですが、一応動いてるみたいです。
ツッコミお待ちしております。
出来ました!
Posted: 2006年12月11日(月) 12:34
by ifeel
blueさん
こんにちは。
アドバイスありがとうございます!
書いていただいたコードを丸写ししてみましたら
思った通りの動きになってくれました。
「Nextページがあったら」と言う条件にされたのですね。
やはり条件式を色々発想する力って必要ですね・・・。
しかもchooseとか初めて見るものがいっぱいで
xslの奥深さを知りましたっ。もっと勉強しなくては。
PREVやNEXTボタンをつけたり、
ページが大量にあった場合の処理(これも過去のトピックの丸写しですが)も
記述していたのでそれと合体させたのが下記のcodeです。
これでようやく完成しました。
同じようなことをしたい方がいるかもしれないので
codeを記載いたします。
blueさん、tsuさん、本当にお世話になりました
コード: 全て選択
<xsl:for-each select="navi">
<xsl:for-each select="prev">
<a href="{@href}"><img src="btn_prev.gif" alt="prev." border="0" /></a>
</xsl:for-each>
<xsl:choose>
<xsl:when test="next">
<xsl:for-each select="page">
<xsl:if test="(@id>=(../@position - 5)) and (@id<=(../@position + 5))">
<xsl:if test="../@position=@id">
<xsl:value-of select="@id" />|
</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:when>
<xsl:when test="prev">
<xsl:for-each select="page">
<xsl:if test="(@id>=(../@position - 5)) and (@id<=(../@position + 5))">
<xsl:if test="../@position=@id">
<xsl:value-of select="@id" />|
</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:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
<xsl:for-each select="next">
<a href="{@href}"><img src="btn_next.gif" alt="next" border="0" /></a></xsl:for-each>
</xsl:for-each>