超链接到预填充了智能搜索过滤器的页面

时间:2018-07-09 09:59:19

标签: kentico

我有一个智能搜索页面,其中显示了该页面上的所有产品,并带有一些智能搜索过滤器,可以根据某些条件缩小产品范围(例如,Filter1具有Option1,Option2和Option3)。

我要完成的工作是在单独的页面上建立一个链接到产品页面的链接,但是当用户单击该链接时,将设置一些搜索过滤器(例如,Filter1将选择Option2)。

2 个答案:

答案 0 :(得分:1)

我不确定是否可以使用开箱即用的解决方案,但是可以通过 SearchFilter.ascx.cs 中的简单调整来解决此问题。文件放置在 CMSWebParts / SmartSearch / SearchFilter.ascx.cs 下。您应该更改方法“ GetSelectedItems ”以查看查询字符串以获取过滤器值(请参见下面的代码段):

/// <summary>
/// Gets selected items.
/// </summary>
/// <param name="control">Control</param>  
/// <param name="ids">Id's of selected values separated by semicolon</param>
private string GetSelectedItems(ListControl control, out string ids)
{
    ids = "";
    string selected = "";

    //CUSTOM: retrive value for query string
    var customFilter = QueryHelper.GetString("customFilter", "");

    // loop through all items
    for (int i = 0; i != control.Items.Count; i++)
    {
        //CUSTOM: ----START-----
        if (!RequestHelper.IsPostBack())
        {
            if (!string.IsNullOrEmpty(customFilter))
            {
                if (control.Items[i].Text.Equals(customFilter, StringComparison.InvariantCultureIgnoreCase))
                {
                    control.Items[i].Selected = true;
                }
            }
        }
        //CUSTOM: ----END-----

        if (control.Items[i].Selected)
        {
            selected = SearchSyntaxHelper.AddSearchCondition(selected, control.Items[i].Value);
            ids += ValidationHelper.GetString(i, "") + ";";
        }
    }

    if (String.IsNullOrEmpty(selected) && (control.SelectedItem != null))
    {
        selected = control.SelectedItem.Value;
        ids = control.SelectedIndex.ToString();
    }

    return selected;
}

您的超链接将如下所示: / Search-result?searchtext = test&searchmode = anyword&customfilter = coffee

使用此修改,您只能在过滤器中发送一个值,但是如果您需要一个以上的值,则可以发送它们并对其进行自定义(最适合您)。另外,您可以发送过滤器名称(如果您有多个过滤器),然后添加上面的检入方法。

我将建议您不要修改kentico文件。取而代之的是,克隆默认的过滤器Web部件并在那里进行修改,因为随着项目的下一次升级,您将丢失所做的更改。我在 Kentico 11 中进行了检查。

答案 1 :(得分:1)

对于智能搜索过滤器: 如果关闭自动回发选项-那么 Web部件控件ID 应该成为您可以使用的查询字符串参数。enter image description here

以上内容将形成如下形式: /Smart-search-filter.aspx?searchtext=abc&searchmode=anyword&wf=2;&ws = 0;&wa = 0

P.S。我建议您看一下公司站点示例:查看智能搜索过滤器Web部件:/ Examples / Web-parts / Full-text-search / Smart-search / Smart-search-filter。这是一个工作示例,您可以将其用作起点。