フォームタグの中にグループ絞り込み条件を表示したい

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
coco
記事: 4
登録日時: 2013年2月15日(金) 10:42

フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by coco » 2013年2月15日(金) 10:59

お世話になります。

フォームタグの中にグループ絞り込み条件を表示したいのですが、
フォームのタグ value="◆{menulist_name}"にどう書いてよいかわかりません。

value="{menulist_cate}◆{menulist_name}"

と書くと、1◆福井県敦賀市の一等地と出力されてしまいました。

お手数をおかけいたしますがご教授ください。

コード: 全て選択

<xsl:for-each select="group">
            <xsl:if test="@key='menu_cate'">
              【
                <xsl:if test="@value='1'">
                  土地
                </xsl:if>
                <xsl:if test="@value='2'">
                  建物
                </xsl:if>
                <xsl:if test="@value='3'">
                  賃貸
                </xsl:if>
                】
            </xsl:if>
          </xsl:for-each>

コード: 全て選択

 

<xsl:for-each select="entry">
    
    <input type="checkbox" name="ご希望メニュー" value="◆{menulist_name}" id="{menulist_name}" />
    <LABEL for="{menulist_name}"><xsl:value-of select="menulist_name" disable-output-escaping="yes" /></LABEL><br />
       
    </xsl:for-each>

出力されたい文字は
例:【土地】◆福井県敦賀市の一等地

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

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by webmaster » 2013年2月18日(月) 08:35

cocoさん、ご質問ありがとうございます。webmasterです。

タグの属性値(value="????"のような部分)の中に、条件によって異なる値を入れる、というようなテンプレートは、デザイン定義用の言語である「XSL」についてかなり慣れていないと難しい為、マニュアルでは説明しておらず、お手数をおかけしております。

属性値を指定するには、すでにお分かりの通り、value="{menulist_cate}"のように中括弧{}を使って項目名を指定して頂くのですが、今回のようにmenulist_cateの内容によって異なる文字列(土地/建物/賃貸)を属性値に指定する、という場合、xsl:attributeという命令タグを使います。

xsl:attributeの使い方については、ネットなどで調べて頂いた方が早いかと思いますが、たとえば例を挙げると以下のようなものになります。

コード: 全て選択

<a>
  <xsl:attribute name="href"><xsl:value-of select="url" /></xsl:attribute>
  Jump to...
</a>
意味としては、<a>要素に「href」という名前の属性を追加し、その中に「url」という項目の中身を設定する、というものです。
出力例は、
<a href="http://test.test">Jump to...</a>
のような感じになります。

これは、実は、以下のデザイン定義とまったく同等です。

コード: 全て選択

<a href="{url}">Jump to...</a>
ですので、通常はこの方法で構わないのですが、もし、urlの内容が、「yahoo」「google」「bing」などの文字列で、それに応じて対応するURLを出力しなければならない、というような場合には、xsl:attributeを使う必要があります。

コード: 全て選択

<a>
  <xsl:attribute name="href">
    <xsl:if test="url='yahoo'">http://yahoo.co.jp</xsl:if>
    <xsl:if test="url='google'">http://google.co.jp</xsl:if>
    <xsl:if test="url='bing'">http://bing.com</xsl:if>
  </xsl:attribute>
  Jump to...
</a>
xsl:attributeを使うと、属性値の中に入れる値をxsl:ifやxsl:value-ofなどのいつもの方法を使って指定することができて便利です。

これを踏まえまして、今回のケースに適用しますと、次のようになります。

☆適用前

コード: 全て選択

<xsl:for-each select="entry">
    
    <input type="checkbox" name="ご希望メニュー" value="◆{menulist_name}" id="{menulist_name}" />
    <LABEL for="{menulist_name}"><xsl:value-of select="menulist_name" disable-output-escaping="yes" /></LABEL><br />
       
    </xsl:for-each>
☆適用後

コード: 全て選択

<xsl:for-each select="entry">
    <input type="checkbox" name="ご希望メニュー" id="{menulist_name}" />
        <xsl:attribute name="value">◆<xsl:value-of select="menulist_name" disable-output-escaping="yes" /></xsl:attribute>
    <LABEL for="{menulist_name}"><xsl:value-of select="menulist_name" disable-output-escaping="yes" /></LABEL><br />
</xsl:for-each>
この時点ではまだ、menu_cateが組み込まれていません。組み込むと、以下のようになります。

☆menu_cate組み込み後

コード: 全て選択

<xsl:for-each select="entry">
    <input type="checkbox" name="ご希望メニュー" id="{menulist_name}">
        <xsl:attribute name="value">
            <xsl:for-each select="//group">
                <xsl:if test="@key='menu_cate'">
                  【
                    <xsl:if test="@value='1'">土地</xsl:if>
                    <xsl:if test="@value='2'">建物</xsl:if>
                    <xsl:if test="@value='3'">賃貸</xsl:if>
                  】
                </xsl:if>
            </xsl:for-each>
            ◆<xsl:value-of select="menulist_name" disable-output-escaping="yes" />
       </xsl:attribute>
    </input>
    <LABEL for="{menulist_name}"><xsl:value-of select="menulist_name" disable-output-escaping="yes" /></LABEL><br />
</xsl:for-each>
menu_cateはグループ絞込み条件ですので、本来であれば<xsl:for-each select="entry">の中には記述できないのですが、以下のように<xsl:for-each select="//group">と、groupの前に//をつけることで、無理やりentryの中で使っています(この方法はリファレンスマニュアルに記載されていません)。

以上、かなり複雑な方法の為、ぱっと見て分からない部分も多々あるかと思いますが、ご不明な点がありましたらまたご質問頂ければ幸いです。

coco
記事: 4
登録日時: 2013年2月15日(金) 10:42

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by coco » 2013年2月18日(月) 12:11

詳しいご説明ありがとうございます。

試してみたところ、エラーは出なかったのですが、

<input type="checkbox"・・・

のタグの中にvalue="●●●●"が、組み込まれませんでした。

タグの書き方でしょうか?

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

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by webmaster » 2013年2月18日(月) 15:04

申し訳ありません、xsl:attributeの位置が間違っておりました…。m(_ _;)m

コード: 全て選択

<input type="checkbox" name="ご希望メニュー" id="{menulist_name}"/>
    <xsl:attribute name="value">
        :
    </xsl:attribute>
となっておりましたが、正しくはxsl:attributeはinput要素の「中」に書かなくてはいけないので、次のようになります。

コード: 全て選択

<input type="checkbox" name="ご希望メニュー" id="{menulist_name}"> ←閉じない
    <xsl:attribute name="value">
        :
    </xsl:attribute>
</input> ←ここに閉じタグをつける
前回の記事中のソースコードは修正済みですので、そちらで再度お試し頂いてもよろしいでしょうか。
何度もお手数をおかけしますが、よろしくお願いいたします。

coco
記事: 4
登録日時: 2013年2月15日(金) 10:42

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by coco » 2013年2月18日(月) 15:36

エラーは出ずにvalue="●●●●"も表示されたのですが、

◆<xsl:value-of select="menulist_name" disable-output-escaping="yes" />の部分

◆福井県敦賀市の一等地

だけ表示されて

【●●●●】が表示されませんでした。menu_cateの部分が読み込まれませんでした。

お手数をおかけいたしますが、よろしくお願いいたします。

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

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by webmaster » 2013年2月18日(月) 17:11

menu_cateの部分が出力されなかったとのことで、何度もお手数をおかけしております…。

原因が掴めていないのですが、たとえば、最初のご質問ですと、「menu_cate」ではなく「menulist_cate」となっている部分もありますが、ここは「menu_cate」でよろしかったでしょうか?

また、URLにはmenu_cateの値(1?3)が指定されているでしょうか。もし指定されていない場合は、&menu_cate=1 などをURLに追加して再度お試し頂ければ幸いです。m(__)m

coco
記事: 4
登録日時: 2013年2月15日(金) 10:42

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by coco » 2013年2月18日(月) 20:19

<xsl:if test="@key='menu_cate'">ではなく
<xsl:if test="@key='menulist_cate'">にすると表示されました。

本当にありがとうございました!

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

Re: フォームタグの中にグループ絞り込み条件を表示したい

投稿記事 by webmaster » 2013年2月18日(月) 20:58

cocoさん、ご報告ありがとうございます。うまくいったとのことで、ほっとしております。 :)

また何かご不明な点がありましたら、ご質問頂ければと思います。

返信