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

Hyperlink to page with smart search filter prepopulated

我有一个智能搜索页面,该页面显示了页面上的所有产品,其中包含一些智能搜索过滤器,可以根据某些标准缩小产品范围(例如,过滤器 1 具有选项 1、选项 2 和选项 3)。

我想要完成的是在 link 到产品页面的单独页面上有一个 link,但是当用户点击那个 link 一些设置搜索过滤器(例如 Filter1 将选择 Option2)。

我不确定开箱即用的解决方案是否可行,但通过 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.

中检查过这个

对于智能搜索过滤器: 如果关闭 auto-postback 选项 - 那么 web 部件控件 ID 应该成为您可以使用的查询字符串参数。

上面的内容类似于: /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。这是一个工作示例,您可以将其用作起点。