如何使用 2sxc 应用程序获取 DNN 搜索结果以显示文章链接?

问题描述

我有一个 2sxc 应用程序,它是一个资源列表。它有一个列表,每个项目都转到一个详细信息视图,该视图具有基于标题的唯一 URL。 (URL 字段是内容类型中的一个字段)。类似于 domain.com/resources/details/my-amazing-resource。

用户在网站上搜索“amazing”时,核心 DNN 搜索结果模块会显示应用程序的结果,包括“My Amazing Resource”项目,但它实际上并未链接到 domain.com/resources/详细信息/我的惊人资源。它只是链接到 domain.com/resources/。

如何才能使搜索结果实际指向应用中项目的唯一 URL?这可能吗? DNNSharp Search Boost 会比核心 DNN 搜索模块更好吗?

解决方法

自从我修改它已经一年多了,但是听起来您正在寻找的东西需要编码。 Dnn Search 将自动从 2sxc 模块中获取它所能获取的信息,但是如果您需要自定义或改进返回的内容,那么您需要使用 CustomizeSearch() 或 CustomizeData() - 我不确定我是否见过任何像样的例子,但是我确实知道 the FAQs App 会这样做,并且必须有某种工作示例。这是在 2sxc Docs 中进行统计的地方, CustomizeSearch()

,

我建议使用博客或新闻应用中的示例。

,

根据 Jeremy 和 Daniel 的建议,我最终更新了我的 _resourcelist.cshtml 文件,使其代码如下所示:

@inherits ToSic.Sxc.Dnn.RazorComponent
@using ToSic.Razor.Blade;
@using ToSic.Eav.Run;
@using ToSic.Sxc.Dnn.Run;
@using ToSic.Sxc.Search;
@functions
{
    /// <summary>
    /// Populate the search - ensure that each entity has an own url/page
    /// </summary>
    /// <param name="searchInfos"></param>
    /// <param name="moduleInfo"></param>
    /// <param name="startDate"></param>
    public override void CustomizeSearch(Dictionary<string,List<ISearchItem>> searchInfos,IContainer moduleInfo,DateTime beginDate)
    {
        foreach (var si in searchInfos["Default"])
        {
            // tell the search system what url it should use in the result
            si.QueryString = "resource/" + AsDynamic(si.Entity).Link;
        }
    }
}