Umbraco XSLT按所选关键字复选框搜索

时间:2012-11-02 06:17:28

标签: xslt search umbraco keyword checkboxlist

我使用文本框多数据类型创建了关键字的属性类型。

然后将关键字分隔为由逗号分隔的单词或短语列表。

我已将关键字包装在A标记中,其中href链接到我的搜索页面,并包含关键字的值,以便所有具有相同关键字的节点都会显示在我的搜索中。

我想添加一个选项,用户可以从带有关键字值的复选框中进行选择,并提交搜索,以便所有选中的关键字都包含在搜索中。

enter image description here

我需要帮助来弄清楚如何获取关键字复选框列表的选中值以提交并在我的搜索页面上显示结果。

这是我到目前为止的内容,它没有提交,我找不到在哪里添加复选框的值:

<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代码的表单。当我点击“提交”按钮时没有任何反应,但如果我有相同代码的副本,则第二个复选框列表将能够提交。此外,当我进行多项选择时,搜索结果会尝试查找“一,二”但不返回任何结果(/image-search.aspx?search=one&search=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>

然后我尝试了以下代码,它不需要在表单中包装列表。同样,多个选择不起作用,但返回的唯一结果是列表中的第一个输入值(在本例中为“one”)。

<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')" />

所以我需要帮助选择使用哪个选项,以及如何在搜索结果中包含多个选项。

1 个答案:

答案 0 :(得分:1)

一些注意事项

  • 您似乎没有意识到属性值模板。在大多数情况下,它们取代了<xsl:attribute>的需要。使用花括号来计算属性中的表达式。
  • 始终(!)对您放入网址的值进行网址编码。比较下面的<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>