「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
-
spico
- パワーユーザー
- 記事: 32
- 登録日時: 2007年4月13日(金) 18:06
投稿記事
by spico » 2007年11月02日(金) 12:02
いつもお世話になっております。
商品の一覧表示ページを作成しておりまして、大分類、小分類と分類が2種類あります。
しかも大分類、小分類ともに重複する商品がありますので、重複した場合はどちらの
一覧に表示しないといけませんので、まずスキーマを以下のようにしています。
コード: 全て選択
<data name="bunrui1A" type="menu" caption="大分類A" group="True">
<menuitem id="1">AAA</menuitem>
<menuitem id="2">BBB</menuitem>
<menuitem id="3">CCC</menuitem>
</data>
<data name="bunrui1B" type="menu" caption="大分類B" group="True">
<menuitem id="0">なし</menuitem>
<menuitem id="1">AAA</menuitem>
<menuitem id="2">BBB</menuitem>
<menuitem id="3">CCC</menuitem>
</data>
<data name="bunrui2A" type="menu" caption="小分類A" group="True">
<menuitem id="1">AAA</menuitem>
<menuitem id="2">BBB</menuitem>
<menuitem id="3">CCC</menuitem>
</data>
<data name="bunrui2B" type="menu" caption="小分類B" group="True">
<menuitem id="0">なし</menuitem>
<menuitem id="1">AAA</menuitem>
<menuitem id="2">BBB</menuitem>
<menuitem id="3">CCC</menuitem>
</data>
それで、実際の表示を
大分類タイトル1
小分類タイトル1
・商品
・商品
・商品
小分類タイトル2
・商品
・商品
・商品
小分類タイトル3
・商品
・商品
・商品
大分類タイトル2
小分類タイトル1
・商品
・商品
・商品
小分類タイトル2
・商品
・商品
・商品
小分類タイトル3
・商品
・商品
・商品
という風にしたいのです。
さらに、小分類がない場合はタイトルごと表示しないようにしたいのですが、
色々悩んだ結果、デザイン定義ファイル内で if文による絞り込みが簡単かなと思い
以下のようなソースを書いたのですが、
コード: 全て選択
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="EUC-JP" omit-xml-declaration="yes" />
<xsl:template match="/entrylist">
<xsl:if test="entry">
<p><strong>小分類1</strong></p>
<ul>
<xsl:for-each select="entry">
<xsl:if test="(bunrui1A ='1') or (bunrui1B ='1') or (bunrui1C ='1')">
<xsl:if test="(bunrui2A ='2') or (bunrui2B ='2')">
<li>
<a href="touseki.php{@href}"><xsl:value-of select="title" disable-output-escaping="yes" /></a>
</li>
</xsl:if>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
これだと小分類分デザイン定義ファイルが必要になります。小分類が15種類ほどあるので、ファイル数が多くなり過ぎてしまうので、何か良い方法はないでしょうか?よろしくお願いします。
-
webmaster
- Site Admin
- 記事: 1451
- 登録日時: 2004年12月10日(金) 10:09
投稿記事
by webmaster » 2007年11月05日(月) 17:51
spicoさん、いつもお世話になっております。
実現されたい最終形を理解しきれていない為、ズレているかもしれませんが、
1つのデザイン定義内には<xsl:for-each select="entry"> は何度でも登場
可能です。
ですので、小分類毎にデザイン定義をつくらずとも、1つのファイル内にまとめて
ズラリと並べてしまうことができます。
これで解決致しますでしょうか…?
またご連絡頂ければ幸いです。
-
spico
- パワーユーザー
- 記事: 32
- 登録日時: 2007年4月13日(金) 18:06
投稿記事
by spico » 2007年11月06日(火) 18:23
ご回答ありがとうございます。
すみませんかなり説明不足でした....。
ご指摘通り、下記の部分を繰り返せば、実現できるというのは分かっていたのですが、
コード: 全て選択
<p><strong>小分類1</strong></p>
<ul>
<xsl:for-each select="entry">
<xsl:if test="(bunrui1A ='1') or (bunrui1B ='1') or (bunrui1C ='1')">
<xsl:if test="(bunrui2A ='2') or (bunrui2B ='2')">
<li>
<a href="touseki.php{@href}"><xsl:value-of select="title" disable-output-escaping="yes" /></a>
</li>
</xsl:if>
</xsl:if>
</xsl:for-each>
上記のコードでは、仮に小分類1が無い場合も
コード: 全て選択
<p><strong>小分類1</strong></p>
の部分が表示されてしまいます。
小分類1が無い場合この部分と<ul>タグを非表示にするにはどうすればいいでしょうか?すみませんがよろしくお願い致します。
-
webmaster
- Site Admin
- 記事: 1451
- 登録日時: 2004年12月10日(金) 10:09
投稿記事
by webmaster » 2007年11月08日(木) 16:19
spicoさん、お返事遅れまして申し訳ありません。
やはりずれていましたか・・すいません。
こんな感じでいかがでしょうか。
<xsl:if test="count(entry[(bunrui1A='1' or bunrui1B='1' or bunrui1C='1') and (bunrui2A='2' or bunrui2B='2')]) > 0">
<p><strong>小分類1</strong></p>
<ul>
<xsl:for-each select="entry[(bunrui1A='1' or bunrui1B='1' or bunrui1C='1') and (bunrui2A='2' or bunrui2B='2')]">
<li>
<a href="touseki.php{@href}"><xsl:value-of select="title" disable-output-escaping="yes" /></a>
</li>
</xsl:for-each>
</ul>
</xsl:if>
あとはこれの繰り返しになります。
試していないのでどこかに記述ミスなどあるかもしれませんが、一度お試し
頂ければ幸いです。
-
spico
- パワーユーザー
- 記事: 32
- 登録日時: 2007年4月13日(金) 18:06
投稿記事
by spico » 2007年11月12日(月) 09:39
上記のコードでうまくいきました。
countをうまく使えば良かったんですね。
for-eachの条件のようなif文で色々試していたんですが、
最新のエントリの条件しか取れずで苦労していました。
ありがとうございました。また何かありましたらよろしくお願いします。