絞り込み表示の時のページングにつきまして

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
mokujin14
アクティブユーザー
記事: 26
登録日時: 2007年8月10日(金) 16:42

絞り込み表示の時のページングにつきまして

投稿記事 by mokujin14 » 2008年3月21日(金) 19:59

webmaster様

いつもお世話になっております。

絞り込み表示をしたときに、ページングがうまく機能せず、困っています。

デザイン定義は次の通りです

コード: 全て選択

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
	<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" /> 
 
	<xsl:template match="/entrylist ">


	
	
		<xsl:for-each select="entry">
		
		<!--絞り込み条件-->
		<xsl:if test="((/*/today/@year=hatsubai1/@year and /*/today/@month=hatsubai1/@month) ">
			内容表示定義
		</xsl:if>
			
		</xsl:for-each>


<!--ページング-->
<div id="p_tb">
	<div id="item_sd">
		<hr />
<xsl:for-each select="navi"> 
  <xsl:for-each select="prev"> 
    <a href="{@href}"><<</a>| 
  </xsl:for-each> 
  
<xsl:choose> 

  <xsl:when test="next"> 
<xsl:for-each select="page"> 
    <xsl:if test="(@id>=(../@position - 3)) and (@id<=(../@position + 3))"> 
    <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 - 3)) and (@id<=(../@position + 3))"> 
    <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}">>></a> 
  </xsl:for-each> 
</xsl:for-each>
</div>
</div>

</xsl:template> 
</xsl:stylesheet> 
ウェブサイトへの埋め込みは次の通りです

コード: 全て選択

<cmsd:entrylist name="item_info1" design="right" rows="8" />

現状では次のように表示します。
  • ・絞り込み表示は機能
    ・ページングは表示するが、絞り込み以外もページングしてしまう
    ・ページングで先へ先へと進むと空欄になってしまう
これはページングに絞り込み定義が反映されていないために
おこってしまうものだと考えています。

絞り込みで表示されたもののみ、ページングを適用させることは可能なのでしょうか。



ご教授ください。よろしくお願いいたします。

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

Re: 絞り込み表示の時のページングにつきまして

投稿記事 by webmaster » 2008年3月31日(月) 16:29

mokujin14 さんが書きました:webmaster様

いつもお世話になっております。

絞り込み表示をしたときに、ページングがうまく機能せず、困っています。

デザイン定義は次の通りです

コード: 全て選択

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
	<xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" /> 
 
	<xsl:template match="/entrylist ">


	
	
		<xsl:for-each select="entry">
		
		<!--絞り込み条件-->
		<xsl:if test="((/*/today/@year=hatsubai1/@year and /*/today/@month=hatsubai1/@month) ">
			内容表示定義
		</xsl:if>
			
		</xsl:for-each>


<!--ページング-->
<div id="p_tb">
	<div id="item_sd">
		<hr />
<xsl:for-each select="navi"> 
  <xsl:for-each select="prev"> 
    <a href="{@href}"><<</a>| 
  </xsl:for-each> 
  
<xsl:choose> 

  <xsl:when test="next"> 
<xsl:for-each select="page"> 
    <xsl:if test="(@id>=(../@position - 3)) and (@id<=(../@position + 3))"> 
    <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 - 3)) and (@id<=(../@position + 3))"> 
    <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}">>></a> 
  </xsl:for-each> 
</xsl:for-each>
</div>
</div>

</xsl:template> 
</xsl:stylesheet> 
ウェブサイトへの埋め込みは次の通りです

コード: 全て選択

<cmsd:entrylist name="item_info1" design="right" rows="8" />

現状では次のように表示します。
  • ・絞り込み表示は機能
    ・ページングは表示するが、絞り込み以外もページングしてしまう
    ・ページングで先へ先へと進むと空欄になってしまう
これはページングに絞り込み定義が反映されていないために
おこってしまうものだと考えています。

絞り込みで表示されたもののみ、ページングを適用させることは可能なのでしょうか。



ご教授ください。よろしくお願いいたします。
 mokujin14さん、ご質問ありがとうございます。お返事が大変遅れまして申し訳ありません。m(__)m

 「絞込み」を、XSLTを使って実現されているものとお見受け致しました。
 「絞込み」を、XSLT側で実現されている場合については、ページング機能は
うまく機能しません。m(__)m

 例えば100件のエントリがあり、1ページに10件ずつ表示する設定だった場合、
CMSDのページング機能は「1ページ目」をXSLT側に渡す際に、「1件目〜10件目」
を渡します。
 XSLT側で絞込みを行う場合には、この絞り込む前の「1件目〜10件目」に対して
行うことになります。

 よって、1件目〜10件目の中に、条件に合致するエントリが3件しかなかった
場合には3件しか表示されません。
 もし次のページ(11件目〜20件目)の中に条件に合致するエントリが0件だった
場合には、1件も表示されません。

 ページング機能と絞込みを組み合わせる場合には、cmsd:group タグを使って
頂く必要がございますが、cmsd:groupでは今回のような「今日の日付」に対する
絞込みは(ご存知の通り)できません。

 大変申し訳ないのですが、今回のような例の場合、

<cmsd:entrylist name="xxx" design="xxx" rows="99999" navigation="off" />

として頂いてページングを行わないようにする方法しかございません。m(__)m

 どうしてもページングを行いたい場合には、一旦全件分出力した後、JavaScript
を使ってブラウザ側で制御する等の方法が考えられます。
 但しこれはJavaScriptによほど慣れた方でないと難しいかと思います。

 以上、回答が遅れた上に解決策を提示できず申し訳ありません。
 内容について追加のご質問があれば、よろしくお願い致します。

返信