グループ絞込み条件の表示がうまく出来ません

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

グループ絞込み条件の表示がうまく出来ません

投稿記事 by kkn » 2005年2月17日(木) 01:07

こんばんわ。
既存サイトのCMS化を進めているところです。

タイトル通りの質問なのですが,
リファレンスマニュアルp.41にある 「グループ絞込み条件の表示」 が上手く出来ません。
何を何処まで説明すればいいのかもよく分らないのですが・・・
一応下記のような感じです。

**
<xsl:for-each select="group">
<xsl:if test="@key='shopkind'">

<xsl:if test="@value=1">
中華
</xsl:if>
<xsl:if test="@value=2">
ラーメン
</xsl:if>
<xsl:if test="@value=3">
和食
</xsl:if>
<xsl:if test="@value=4">
洋食
</xsl:if>
<xsl:if test="@value=5">
スイーツ
</xsl:if>
」の一覧<br />
</xsl:if>
</xsl:for-each>

リファレンスにあった上記のソースを,schema 以下のディレクトリ(名前はスキーマ名)以下の xsl に記述し,
"@key='shopkind'" と "@value=1" の値と出力内容を,
それぞれ自分で設定した項目名と ID ,出力内容に書き換えました。

トップページ用の PHP のメニュー項目は,
「URL パラメータからの絞込みの指定」 のやり方(リファレンスp.48)で
リンク先の本文一覧表示をメニュー項目に合わせて絞り込んで表示するようにしました。

この絞り込み表示の際に,ヘッダー辺りに 項目名 をタイトルとして入れたいのです。

絞込み表示用の xsl に,上記のソースを書いたのですが,
“ 「」の一覧 ”  という文字が出るだけで項目名が出ません。
単純に記述の場所が間違っている気もしますが; どうにも煮詰まってしまいまして・・・;

何かアドバイスを頂けるようでしたらお願いしたいと思います。 :cry:

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

Re: グループ絞込み条件の表示がうまく出来ません

投稿記事 by webmaster » 2005年2月17日(木) 04:08

 webmasterです。
 グループ絞込み関係は質問が少なく、おそらく複雑すぎて使っている人が居ない
のではないかと思っていた為、こういうご質問は非常に助かります。

 グループ絞込み条件の表示はまさにそのような用途にと考えて付けたものですが、マニュアルを見るとあまり丁寧とは言いがたいですね・・・すいません。

 まず、リファレンスマニュアルP.41のサンプルの挿入位置ですが、これは
 <xsl:template match="/entrylist">
 の直下となります(マニュアルに書いてませんでした・・)。

 とはいえ、”「」”という文字が出ているのなら、おそらく挿入位置は合っているのではないかと思います。

 スキーマの定義とうまく適合していない可能性が高いです。
 サンプルと同様に、menu項目をグループ項目として扱ってらっしゃるものと思いますが、menu項目のidを変更した場合は、デザイン定義側の@value=1の"1"の部分もあわせて変更する必要があります。

 具体的なサンプルとして、私がテスト用に作成して動作させているデザイン定義ファイルを貼り付けます。

 もしご不明な場合は、スキーマファイルとデザイン定義ファイルをここに貼って頂くか、もしくは直接メールに添付して頂ければ幸いです。

コード: 全て選択

<?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">
    <a href="test_viewcat.php">カテゴリ選択へ</a>
    <xsl:for-each select="group">
      <xsl:if test="@key='shopkind'">
        「
        <xsl:if test="@value=1">
          中華
        </xsl:if>
        <xsl:if test="@value=2">
          ラーメン
        </xsl:if>
        <xsl:if test="@value=3">
          和食
        </xsl:if>
        <xsl:if test="@value=4">
          洋食
        </xsl:if>
        <xsl:if test="@value=5">
          スイーツ
        </xsl:if>
        」の一覧<br />
      </xsl:if>
    </xsl:for-each>
    
    <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="next" >
          <a href="{@href}">次のページ</a>
      </xsl:for-each>
      <xsl:if test="not(next)" >次のページ</xsl:if>
    </xsl:for-each>

    <br />

    <xsl:for-each select="entry">
    <a href="test_viewentry.php{@href}"><xsl:value-of select="@id" /></a>
    <table border="1">
      <tr><td><xsl:value-of select="shopname" /></td></tr>
      <tr><td><xsl:value-of select="description" disable-output-escaping="yes" /></td></tr>
      <tr><td>
      <xsl:choose>
        <xsl:when test="shopkind='1'">中華</xsl:when>
        <xsl:when test="shopkind='2'">ラーメン</xsl:when>
        <xsl:when test="shopkind='3'">和食</xsl:when>
        <xsl:when test="shopkind='4'">洋食</xsl:when>
        <xsl:when test="shopkind='5'">スイーツ</xsl:when>
      </xsl:choose>
      </td></tr>
    </table>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
 元となるスキーマは次の通りです。

コード: 全て選択

<?xml version="1.0" encoding="UTF-8"?>
<schema name="shop" caption="お店情報" sortkey="int1" sortorder="asc" title="description">
    <data name="shopname" type="text" caption="お店の名前" maxlength="10" />
    <data name="url" type="text" caption="ホームページ" />
    <data name="description" type="textarea" caption="説明" output="html2" maxlength="1000" />
    <data name="shopkind" type="menu" caption="お店種別" group="True" >
        <menuitem id="1">中華</menuitem>
        <menuitem id="2">ラーメン</menuitem>
        <menuitem id="3">和食</menuitem>
        <menuitem id="4">洋食</menuitem>
        <menuitem id="5">スイーツ</menuitem>
    </data>
</schema>

kkn

Re: グループ絞込み条件の表示がうまく出来ません

投稿記事 by kkn » 2005年2月17日(木) 14:13

貼り付けだと長くなるので,
先ほどメールにて スキーマファイルと xsl ファイルを送りました。
経過については,こちらにも適宜書き込みしたいと思います。
宜しくお願いします。

kkn

解決しました

投稿記事 by kkn » 2005年2月17日(木) 14:37

ご返信頂いたとおり,

<xsl:if test="@value=1"> の "@value=1" の部分を

<xsl:if test="@value=ns1"> ではなく
<xsl:if test="@value=’ns1’"> と書き換えたらうまくいきました。
(ns1 は自分で設定した ID)

ID が文字列の場合は,''で囲う必要がある(数値の場合は不要),,,
考えてみれば当然のような気がしました。;

うまくいって良かったです。
素早いご教授ありがとうございました。

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

Re: 解決しました

投稿記事 by webmaster » 2005年2月17日(木) 16:33

 webmasterです。
 先ほどはメールでのご連絡ありがとうございました。
kkn さんが書きました: <xsl:if test="@value=ns1"> ではなく
<xsl:if test="@value=’ns1’"> と書き換えたらうまくいきました。
 

 マニュアルの不備でご迷惑をおかけしました。
 メールでもご連絡した通り、グループ項目の値が1や2などの数値の場合は

<xsl:if test="@value=1">

 のように''を付ける必要はないのですが、グループ項目の値が今回のように
ns1などの数値以外の値の場合、'ns1'のように''で囲う必要があることを
マニュアルに記載していませんでした。

 実際には数値だろうがなんだろうが''で囲ってしまえばうまくいくので、
マニュアルの方を

<xsl:if test="@value='1'">

 のように修正します。
 ありがとうございました。

返信