我有一个智能搜索页面,其中显示了该页面上的所有产品,并带有一些智能搜索过滤器,可以根据某些条件缩小产品范围(例如,Filter1具有Option1,Option2和Option3)。
我要完成的工作是在单独的页面上建立一个链接到产品页面的链接,但是当用户单击该链接时,将设置一些搜索过滤器(例如,Filter1将选择Option2)。
答案 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)