ページ番号付きのナビ

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

ページ番号付きのナビ

投稿記事 by ifeel » 2006年12月08日(金) 16:07

こんにちは。
いつもお世話になっております。

http://cms.al-design.jp/phpbb/viewtopic.php?t=130
を見て、ナビゲーションをページ番号付きにして

prev 1 | 2 | 3 next

のようにしたのですが、この場合ページが1ページしかないと

1|

と表示され、ちょっと間が抜けた感じなので
「ページが1ページしかない場合は」
ページナビを非表示にしようと思ったのですが
この条件の記述方法がわかりませんでした。
ご教授いただけると幸いです。

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

投稿記事 by tsu » 2006年12月08日(金) 16:34

ifeelさん

ナビ機能は使ったこと無いのでよくわからないのですが、

コード: 全て選択

<xsl:if test="page<1">
<xsl:for-each select="page">
〜
</xsl:for-each>
</xsl:if>
こんな感じでpageをifでくくってみるのはどうでしょうか?

ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

ありがとうございます

投稿記事 by ifeel » 2006年12月08日(金) 17:22

tsuさん

こんにちは。アドバイスありがとうございます。

試してみたのですが、ページ数が2ページ以降も
1 | 2 | 3
の部分が消えてしまうようでした。

「page」はそのページの番号を保持しているのでしょうか??
ページが全部で何ページあるのかを知るには・・・と悩み中です。

もしくは、1ページに10件表示、と決まっているので
エントリー総数を調べても良いかなと思って
<xsl:if test="count(entry)>10"></xsl:if>
でくくってみたり
countの中身を page、@id、スキーマ名
などなど闇雲に試しましたが上手く行きませんでした :oops:

もう少し色々試してみたいと思います。

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

投稿記事 by tsu » 2006年12月08日(金) 18:05

そのままやっても次の記事すら表示されません、、、、。
ナビの使い方もっと勉強しようと思います。

お役に立てず申し訳ないm(_ _)m

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

投稿記事 by blue » 2006年12月08日(金) 21:36

 なんとなく、出来たっぽいのでお知らせします :lol:

コード: 全て選択

<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>
 うまく行ったように見えるのですが。どうでしょう??

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

投稿記事 by tsu » 2006年12月09日(土) 00:12

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>
とこんな感じで書けば普通に動作すると思い込んでいるのですが、、、。

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

投稿記事 by blue » 2006年12月09日(土) 18:08

 tsuさんこんにちは。
 埋め込みタグは、

コード: 全て選択

<cmsd:entrylist name="test" design="test" />
になるかと思います。

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

まちがいです!

投稿記事 by blue » 2006年12月09日(土) 20:50

 申し訳ないです。昨日投稿したコードは間違いでした。
 表示されたページナビの、最終ページを表示させた場合も、ページナビが消えてしまいます。
 もちっと方法を考えてみます。。

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

結局・・・

投稿記事 by blue » 2006年12月09日(土) 21:54

 度々すみません。

コード: 全て選択

<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>
 なんかベタな気もするんですが、一応動いてるみたいです。
ツッコミお待ちしております。

ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

出来ました!

投稿記事 by ifeel » 2006年12月11日(月) 12:34

blueさん

こんにちは。
アドバイスありがとうございます!

書いていただいたコードを丸写ししてみましたら
思った通りの動きになってくれました。

「Nextページがあったら」と言う条件にされたのですね。
やはり条件式を色々発想する力って必要ですね・・・。
しかもchooseとか初めて見るものがいっぱいで
xslの奥深さを知りましたっ。もっと勉強しなくては。

PREVやNEXTボタンをつけたり、
ページが大量にあった場合の処理(これも過去のトピックの丸写しですが)も
記述していたのでそれと合体させたのが下記のcodeです。
これでようやく完成しました。
同じようなことをしたい方がいるかもしれないので
codeを記載いたします。

blueさん、tsuさん、本当にお世話になりました :D

コード: 全て選択

<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>

返信