ページ切替ナビについて

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
文日

ページ切替ナビについて

投稿記事 by 文日 » 2005年6月09日(木) 16:45

こんにちは、先月も質問をさせていただきました文日です。

さて、今回は、ご質問が二点ほどあります。

1.
動的ページで目当てのページへ直接ジャンプするのに、下記URL
http://cms.al-design.jp/phpbb/viewtopic.php?t=130#422
のトピックを参考に、navi要素の中のpage要素を使って実現しようとしています。

表示しているページへのリンクは表示しないようにしたいと思っています。
しかしながら、表示されてしまって、どのようにしたら意図した通りに表示されるのか悩んでいます。
上記URLのトピックではリンクの文字に@idを使っているようですが、
もしかして、エントリーのデータを使おうとしている点がまずいのでしょうか?

XMLについてイマイチ理解できていないので、
デザイン定義ファイルの間違っている点などをご指摘していただければと思います。

ちなみに、現在、〜.list.〜.design.xslの、ページ切り替えナビの部分は下記のようにしています。

コード: 全て選択

<xsl:for-each select="navi">
  <xsl:for-each select="page">
    <xsl:for-each select="../../entry">
      <xsl:if test="not(../navi/@position=@id)">
        <xsl:if test="not(@id=00001)">/</xsl:if>
        <a href="{@href}"><xsl:value-of select="name" /></a>
      </xsl:if>
    </xsl:for-each>
  </xsl:for-each>
</xsl:for-each>
2.
ページ切替ナビで、たとえば、

コード: 全て選択

<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>
の、「<<前のページへ」、「次のページへ>>」を
エントリーのデータを使うことは出来ないでしょうか?
(つまり、<xsl:value-of〜>を使って表示したいのですが・・・)

以上、よろしくお願いします。

余談(別件)
リファレンスマニュアルの5.5.9で「cms::entry_navi命令を使用する必要があります。」とありますが、「cmsview::navi_entry」だと思うのですが・・・。
また、6.3.2で、「cmsview::navi_entry命令ではなく、このcmsview::navi_entry命令を使います。」という文章と、
cmsview::navi_entry命令の説明をしているのに「使い方はcmsview::navi_entry命令と全く同じです。」という文章は、変な感じがするのですが・・・。
ご確認いただければと思います。

長文、失礼しました。

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

Re: ページ切替ナビについて

投稿記事 by webmaster » 2005年6月10日(金) 01:19

 webmasterです。文日さん、いつもご質問ありがとうございます。m(_ _)m

 http://cms.al-design.jp/phpbb/viewtopic.php?t=130#422
 のトピックの件についてですが、
 現在のページのリンクは表示しないようにする場合には、上記URLの下の
サンプル中の、

コード: 全て選択

    <xsl:if test="../@position=@id"> 
      <strong><xsl:value-of select="@id" /></strong>| 
    </xsl:if> 
 の部分を丸ごと削除すればOKかと思います。

 また、ご質問2についてですが、navi_entry命令で出力される内容には、
前後のエントリのデータが含まれて居ない為、ナビゲーション部分にエントリ
データの一部(例えば件名など)を出力することはできません。

 ただ、blogなどのように前後の記事の件名をナビゲーション代わりに用いたい
場合があると思いますので、何か実現方法を検討してみます。

 余談のマニュアルの不備ですが、全てご指摘どおりです。
 お恥ずかしい限りで、大変ご迷惑をおかけしました。
 次回更新時に修正版を掲載致します。

 ありがとうございました。m(_ _)m

ゲスト

Re: ページ切替ナビについて

投稿記事 by ゲスト » 2005年6月10日(金) 12:04

早速の返信、ありがとうございます。

質問1の件ですが、
http://cms.al-design.jp/phpbb/viewtopic.php?t=130#422
のサンプルをそのまま記述したのですが、
1|
としか、表示されません。(「1」は、リンク無し。)

そして、

コード: 全て選択

<xsl:if test="../@position=@id"> 
  <strong><xsl:value-of select="@id" /></strong>| 
</xsl:if>
の部分を丸ごと削除すると、何も表示されなくなってしまうのですが・・・。

ちなみに、表示させるときは、cmsview::listpageの方でやっていますが、それがまずいのでしょうか?


また、質問2の件についてですが、質問1を試行錯誤していろいろ試しているときに、
なぜか出来たのですが、その後、質問1の件が完成してから改めて作ろうとしたら、
どのようにやったか忘れてしまい、何か簡単な方法があるのではないかと思い、
質問させていただきました。
じつは、出来なかったのですね・・・。
失礼しました。

文日

Re: ページ切替ナビについて

投稿記事 by 文日 » 2005年6月10日(金) 12:06

すいません、上の2005年6月10日(金) 12:04の記事は、
名前を入れ忘れましたが、私が書き込みした記事です。

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

Re: ページ切替ナビについて

投稿記事 by webmaster » 2005年6月11日(土) 10:08

 webmasterです。
 お返事遅れまして申し訳ありません。m(_ _)m

 サンプルの内容に、分かりやすくコメントをつけてみました。

コード: 全て選択

<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>
 ということですので、
1|
 としか表示されないとすれば、ページが1ページしか無かったということなのだと
思います。1ページ当たりの表示件数を10件にしているのであれば、11件以上の
エントリを登録すれば、2ページ目以降が出てくるかと思います。

コード: 全て選択

<xsl:if test="../@position=@id"> 
  <strong><xsl:value-of select="@id" /></strong>| 
</xsl:if>
の部分を丸ごと削除すると、何も表示されなくなってしまうのですが・・・。
 これは、1ページしか存在しない状態で、「現在のページを表示する部分」を
丸ごと削除しているので、結果的に何も表示されなくなっているのだと思います。

 てっきりそれで良いものと思ってアドバイスを出してしまったのですが、そういう
コトではなかったみたいですね。すいません。(-_-;

 cmsview::listpageを使うのはそれであっていると思います。
 (エントリ一覧をナビゲーション付きで表示したい、という要件なのですよね?
ちなみにこの場合のナビゲーションはページ単位の切替ナビゲーションであり、
エントリ単位の切替ではありません。1ページに収まりきらない量のエントリが
登録された時に初めて意味をもつナビゲーションです。
 エントリ単位のナビゲーションを行いたい場合は、navi_entryをご利用ください。)

 最後に、ご参考までに私がよくやるパターンを掲載しておきます。
 前のページや次のページが存在しない時は、「前のページ」「次のページ」という
文字をリンクなしで表示します。

コード: 全て選択

<xsl:for-each select="navi"> 

  <!-- 前のページが存在すれば、前のページへのリンクを表示する。 --> 
  <xsl:for-each select="prev"> 
    <a href="{@href}"><<前のページへ</a>| 
  </xsl:for-each> 

  <!-- 前のページが存在しなければ、「前のページへ」をリンクなしで表示する。 --> 
  <xsl:if test="not(prev)"> 
    <<前のページへ| 
  </xsl:if> 


  <!-- ページへの直接リンクを表示する。 --> 
  <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:if test="not(next)"> 
    次のページへ>> 
  </xsl:if> 

</xsl:for-each>

文日
記事: 2
登録日時: 2005年6月11日(土) 11:34

Re: ページ切替ナビについて

投稿記事 by 文日 » 2005年6月11日(土) 12:17

こんにちは、文日です。
何度もすいません。

わかりずらい書き方で申し訳なかったのですが、
やりたいことは、
 ・エントリ単位のナビゲーションを行いたい
 ・現在のページへのリンクは表示しない
です。

じつは、エントリー数は5件あるのですが、
cmsview::navi_entryを使うと、

コード: 全て選択

<xsl:for-each select="page"> 
〜略〜
</xsl:for-each> 
の部分が表示(出力?)されないのです。
ページのソースを見ても、何も出力されてない感じです。

そこで、listpageを使って色々やってら、こちらの意図した表示ではないですが一応、表示できたため、
また、listpageとnavi_entryの使い分けをイマイチ理解できていなかったため、
navi_entryではなくlistpageを使っておりました。
(select="prev"とselect="next"の部分は、正常に表示されます。)

もしかして、<xsl:for-each select="page">は、cmsview::entry_naviでは、使えないのでしょうか?

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

Re: ページ切替ナビについて

投稿記事 by webmaster » 2005年6月11日(土) 18:24

 webmasterです。

 何度もすいません、文日さんのやりたいことが分かったような気がします。

 画面上に「エントリ一覧(タイトルのみ)」と「エントリ詳細」が同居していて、
エントリ一覧の件名をクリックすると、エントリ詳細部分が切り替わるような
ものを作ろうとされていると理解致しました。

 その前提で、エントリ件名一覧(リンク)の部分を、「現在表示されている
エントリのリンクは表示しないようにする」ということをされたいのだと受け取り
ました(合っているでしょうか?)。

 結論から申し上げますと、現在のCMSDでは、前提の部分は可能なのですが、
「現在表示されているエントリのリンクは表示しないようにする」という部分が
実現できません(申し訳ありません)。
 これは、エントリ一覧の出力処理と、エントリ一件の出力処理が完全に独立
しており、内部で連携を取っていない為です。

 しかし、これは確かに欲しい機能だと思いますので、将来の機能追加リスト
に挙げさせて頂きます。m(_ _)m

 具体的には、次の機能を追加したいと思います。

 (1) エントリ一覧で出力されるデータに、URLから与えられるエントリID
  の情報を含める。これにより、エントリ一覧のXSLT側で
  「今、表示されている(かもしれない)エントリID)」が取得できるようになる。
 (2) エントリ一覧表示コマンドに、ページ番号ではなくエントリIDを与え、
  そのエントリが含まれるページを自動的に選択する機能。

 逆に言えば、上記の(1)の機能が無い為、現状では文日さんの希望する
「現在のページへのリンクは表示しない」というものが実現できません。m(_ _)m
 (2)については以前から必要だと感じていた機能で、既に機能追加リスト
には挙がっております。

 時期は未定ですが、まずは(1)から機能追加していきたいと思います。
文日 さんが書きました:もしかして、<xsl:for-each select="page">は、cmsview::entry_naviでは、使えないのでしょうか?
 はい、"page"要素は、エントリ一覧を出力する場合のみご利用になれます。
 cmsview::entry_naviでは、前後のエントリIDのみが出力されます。
 この辺分かりにくくて申し訳ありません。

 これは、エントリ一件表示の場合に、全てのエントリの情報を例え
エントリIDだけだとしても毎回出力していたのでは(画面に表示しなくても、
処理上は出力されます)、パフォーマンスが低下する為です。 
 この為、前後のエントリIDのみの出力に留めております。

 ただ、前回書かせて頂いたとおり、前後のエントリ情報としてエントリID
以外にtitleだけでも表示できるようになっていれば、何かと便利だと
思いますので、そのようなオプションも追加しようと思います。

 また、思い違いなどありましたら、申し訳ありませんがまたご連絡頂ければ
幸いです。

文日
記事: 2
登録日時: 2005年6月11日(土) 11:34

Re: ページ切替ナビについて

投稿記事 by 文日 » 2005年6月11日(土) 19:50

文日です。
webmaster さんが書きました:画面上に「エントリ一覧(タイトルのみ)」と「エントリ詳細」が同居していて、
エントリ一覧の件名をクリックすると、エントリ詳細部分が切り替わるような
ものを作ろうとされていると理解致しました。

その前提で、エントリ件名一覧(リンク)の部分を、「現在表示されている
エントリのリンクは表示しないようにする」ということをされたいのだと受け取り
ました(合っているでしょうか?)。
はい、その認識で間違いありません。
説明がわかりにくくて、何度もお手間をおかけして申し訳ありませんでした。

機能の追加、時期が未定との事ですが、末永く待ちたいと思います。

ご回答ありがとうございました。

返信