0

テキストボックスの複数のデータ型を使用して、キーワードのプロパティ型を作成しました。

キーワードは、コンマで区切られた単語またはフレーズのリストに分割されます。

検索ページにリンクする href を使用してキーワードを A タグでラップし、キーワードの値を含めて、同じキーワードを持つすべてのノードが検索に表示されるようにしました。

ユーザーがチェックボックスからキーワードの値を選択できるオプションを追加し、チェックを入れたすべてのキーワードが検索に含まれるように検索を送信したいと考えています。

ここに画像の説明を入力

検索ページに結果を送信して表示するために、キーワード チェックボックスのリストのチェックされた値を取得する方法を理解するのに助けが必要です。

これは私がこれまでに持っていたもので、送信されず、チェックボックスの値を追加する場所が見つかりません:

<xsl:if test="string($currentPage/keywords) != ''">

<!-- get the contents of the textbox multiple, with commas -->
<xsl:variable name="textWithBrs" select="umbraco.library:ReplaceLineBreaks($currentPage/keywords)"/>

<!-- replace commas with pipes so you can use Split -->
<xsl:variable name="textWithPipes" select='umbraco.library:Replace($textWithBrs, ", ", "|")'/>

<!-- split into an array of items and output as unordered list -->
<xsl:variable name="items" select="umbraco.library:Split($textWithPipes, '|')"/>
<ul>
  <xsl:for-each select="$items/value">
    <li>
      <input type="checkbox" value="true" keyword="{.}" id="{.}" name=""/>
      <a>
      <xsl:attribute name="href"> <xsl:text disable-output-escaping="yes">/imagery/image-search.aspx
      <![CDATA[?]]>
      search=</xsl:text> <xsl:value-of select="." /> </xsl:attribute>
      <xsl:attribute name="title"> <xsl:value-of select="."/> </xsl:attribute>
      <xsl:value-of select="."/> </a> </li>
  </xsl:for-each>
</ul>
<input type="submit" value="Search" id="btnSearchBottom" name="" onclick="location.href='/imagery/image-search.aspx?search=otbra'" />
</xsl:if>

どんな援助でも大歓迎です。

乾杯、JV

私はいくつかの編集を行い、現在は半機能しています。ただし、私の Umbraco テンプレートには、コンテンツをラップするフォームがあります。それがいくつかの問題を引き起こしていると思います。

私のテストでは、XSL コードをラップするフォームがありました。「送信」ボタンをクリックしても何も起こりませんが、同じコードの複製がある場合、チェックボックスの2番目のリストを送信できます。また、複数の選択を行うと、検索結果は結果を返さない「1、2」を検索しようとします (/image-search.aspx?search=one&search=two)。"one two" (/image-search.aspx?search=one%20two) を検索する必要があります。

繰り返し形式の私のコード:

<div style="display:none;">
  <form name="input" action="/imagery/image-search.aspx" method="get">
    <ul>
      <xsl:for-each select="$items/value">
        <li>
          <input type="checkbox" name="search" value="{.}"/>
          &nbsp; <a href="/imagery/image-search.aspx?search={umbraco.library:UrlEncode(.)}" title="{.}"> <xsl:value-of select="."/> </a> </li>
      </xsl:for-each>
    </ul>
    <input type="submit" value="Submit"/>
  </form>
</div>
<div>
  <form name="input" action="/imagery/image-search.aspx" method="get">
    <ul>
      <xsl:for-each select="$items/value">
        <li>
          <input type="checkbox" name="search" value="{.}"/>
          &nbsp; <a href="/imagery/image-search.aspx?search={umbraco.library:UrlEncode(.)}" title="{.}"> <xsl:value-of select="."/> </a> </li>
      </xsl:for-each>
    </ul>
    <input type="submit" value="Submit"/>
  </form>
</div>

次に、リストをフォームにラップする必要のない次のコードを試しました。ここでも複数選択は機能しませんが、返される結果はリストの最初の入力値 (この場合は「1」) だけです。

<ul id="checkboxes">
  <xsl:for-each select="$items/value">
    <li>
      <input id="{.}" type="checkbox" name="search" value="{.}"/>
      &nbsp; <a href="/imagery/image-search.aspx?search={umbraco.library:UrlEncode(.)}" title="{.}"> <xsl:value-of select="."/> </a> </li>
  </xsl:for-each>
</ul>
<input name="searchbutton" class="button" value="Search" type="reset" onClick="location.href='/imagery/image-search.aspx?search=' + $('#checkboxes input').attr('value')" />

そのため、使用するオプションと、検索結果に複数の選択肢を含める方法について助けが必要です。

4

1 に答える 1

1

いくつかのメモ

  • あなたは属性値テンプレートを認識していないようです。<xsl:attribute>ほとんどの場合、それらは の必要性を置き換えます。中括弧を使用して、属性の式を評価します。
  • URL に入れる値は常に (!) URL エンコードします。以下を比較してください<a href="...">
  • フォーム フィールドに名前がない場合、その値はブラウザによって送信されません。一方、IDは必要ありません。
  • 使用<xsl:if test="string($anything) != ''>する必要はありません。空でない文字列は真実なので、<xsl:if test="$anything">十分です。
  • onclickフォームを送信したい場合は、送信ボタンで使用しないでください。このパラメーターを使用して<form action="...">、フォーム値の送信先を決定します。または JavaScript を使用しますが、"onclick". マークアップに JS をまったく含めないでください。

XSL コード

<xsl:if test="$currentPage/keywords">
  <xsl:variable name="textWithBrs" select="
    umbraco.library:ReplaceLineBreaks($currentPage/keywords)
  "/>
  <xsl:variable name="textWithPipes" select="
    umbraco.library:Replace($textWithBrs, ', ', '|')
  "/>
  <xsl:variable name="items" select="
    umbraco.library:Split($textWithPipes, '|')
  "/>
  <ul>
    <xsl:for-each select="$items/value">
      <li>
        <input type="checkbox" value="true" keyword="{.}" name="keywords"/>
        <a href="/imagery/image-search.aspx?search={umbraco.library:UrlEncode(.)}" title="{.}">
          <xsl:value-of select="."/>
        </a>
      </li>
    </xsl:for-each>
  </ul>
  <input type="submit" value="Search" id="btnSearchBottom" />
</xsl:if>
于 2012-11-02T08:04:34.330 に答える