超链接到预填充智能搜索过滤器的页面
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。这是一个工作示例,您可以将其用作起点。
我有一个智能搜索页面,该页面显示了页面上的所有产品,其中包含一些智能搜索过滤器,可以根据某些标准缩小产品范围(例如,过滤器 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。这是一个工作示例,您可以将其用作起点。