如何在网站前端实现搜索功能,并显示带有高亮关键词的搜索结果列表?

📅 👁️ 97

在构建一个内容丰富的网站时,提供高效便捷的搜索功能是提升用户体验的关键一环。安企CMS(AnQiCMS)在设计之初就充分考虑了这一点,通过其灵活的模板引擎和内置标签,我们可以相对轻松地在网站前端实现搜索功能,并进一步优化,让搜索结果中的关键词醒目地高亮显示。

核心机制:理解 AnQiCMS 的搜索原理

安企CMS 网站前端搜索的核心在于 search/index.html 这个模板文件。当用户通过网站上的搜索表单提交一个关键词时,这个关键词会作为名为 q 的 URL 查询参数传递给预设的 /search 路径。例如,如果用户搜索“安企CMS”,URL 可能会是 http://yourdomain.com/search?q=安企CMS

search/index.html 模板中,系统内置的 archiveList 标签非常智能。它会自动识别并利用 URL 中存在的 q 参数来筛选相关的文档内容。这意味着,大部分的搜索逻辑都由 AnQiCMS 内部处理,我们只需关注前端的呈现。

构建搜索表单

实现搜索功能的第一步是提供一个直观的搜索表单。这个表单通常放置在网站的页头、侧边栏或专门的搜索页面上。一个基本的搜索表单会使用 GET 方法将用户输入的关键词发送到 /search 路径。

以下是一个简单的搜索表单示例:

<form method="get" action="/search">
    <div class="search-input-group">
        <input type="text" name="q" placeholder="请输入搜索关键词..." value="{{urlParams.q}}" class="search-field">
        <button type="submit" class="search-button">搜索</button>
    </div>
</form>

在这个表单中:

  • method="get" 确保关键词作为 URL 查询参数传递。
  • action="/search" 指定了搜索结果页的路径。
  • name="q" 是输入框的关键,AnQiCMS 的 archiveList 标签会识别这个 q 参数。
  • value="{{urlParams.q}}" 这是一个小技巧,它能让用户在搜索结果页看到自己之前输入的关键词,提升用户体验。urlParams.q 会自动获取当前 URL 中 q 参数的值。

展示搜索结果列表

当用户提交搜索请求后,AnQiCMS 会加载 search/index.html 模板。在这个模板中,我们使用 archiveList 标签来获取并展示搜索到的文档列表。

{% archiveList archives with type="page" limit="10" %}
    {% for item in archives %}
    <div class="search-result-item">
        <h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
        <p class="description">{{item.Description}}</p>
        <div class="meta">
            <span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
            <span>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
            <span>浏览量:{{item.Views}}</span>
        </div>
    </div>
    {% empty %}
    <div class="no-results">
        很抱歉,没有找到与“{{urlParams.q}}”相关的结果。
    </div>
    {% endfor %}

    <div class="pagination-area">
        {% pagination pages with show="5" %}
            {# 分页导航的代码,可参考官方文档 #}
            {% if pages.FirstPage %}
                <a class="{% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">首页</a>
            {% endif %}
            {% if pages.PrevPage %}
                <a href="{{pages.PrevPage.Link}}">上一页</a>
            {% endif %}
            {% for page in pages.Pages %}
                <a class="{% if page.IsCurrent %}active{% endif %}" href="{{page.Link}}">{{page.Name}}</a>
            {% endfor %}
            {% if pages.NextPage %}
                <a href="{{pages.NextPage.Link}}">下一页</a>
            {% endif %}
            {% if pages.LastPage %}
                <a class="{% if pages.LastPage.IsCurrent %}active{% endif %}" href="{{pages.LastPage.Link}}">末页</a>
            {% endif %}
        {% endpagination %}
    </div>
{% endarchiveList %}

在上述代码中:

  • archiveList archives with type="page" limit="10" 会自动获取与 q 参数匹配的文档,并按每页10条进行分页。
  • for item in archives 循环遍历每一条搜索结果。
  • item.Titleitem.Linkitem.Description 等是文档的常用字段,用于展示搜索结果摘要。
  • {% empty %} 块用于在没有搜索结果时显示友好提示。
  • {% pagination pages with show="5" %} 标签用于生成分页链接,确保在大量搜索结果时也能轻松浏览。

实现关键词高亮

为了让搜索结果中的关键词更加醒目,我们可以利用 AnQiCMS 模板引擎提供的过滤器来对标题和描述进行处理。核心思想是:获取用户输入的关键词,然后将标题和描述中所有匹配到的关键词用 <mark> 标签包裹起来。

AnQiCMS 提供了 replace 过滤器和 safe 过滤器,可以帮助我们轻松实现这一点。

  1. 获取搜索关键词:在 search/index.html 模板中,可以通过 {{urlParams.q}} 直接获取当前 URL 中的 q 参数值,即搜索关键词。
  2. 使用 replace 过滤器:将标题或描述中匹配到的关键词替换为带有 <mark> 标签的关键词。
  3. 使用 safe 过滤器:由于 replace 过滤器会在字符串中插入 HTML 标签(如 <mark>),为了让浏览器正确解析这些标签而不是将其作为纯文本显示,我们需要在输出时使用 safe 过滤器。

将上面的搜索结果展示代码稍作修改,加入关键词高亮:

”`twig {% set searchQuery = urlParams.q %} {# 获取搜索关键词 #}

{% archiveList archives with type=“page” limit=“10” %}

{% for item in archives %}
<div class="search-result-item">
    <h3>
        <a href="{{item.Link}}">
            {# 对标题进行高亮处理 #}
            {% if searchQuery %}
                {{ item.Title|replace:searchQuery,'<mark>'~searchQuery~'</mark>'|safe }}
            {% else %}
                {{ item.Title }}
            {% endif %}
        </a>
    </h3>
    <p class="description">
        {# 对描述进行高亮处理 #}
        {% if searchQuery %}
            {{ item.Description|replace:searchQuery,'<mark>'~searchQuery~'</mark>'|safe }}
        {% else %}
            {{ item.Description }}
        {% endif %}
    </p>
    <div class="meta">
        <span>分类:{% categoryDetail with name="Title" id=item.CategoryId %}</span>
        <span>发布日期:{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
        <span>浏览量:{{item.Views}}</span>
    </div>
</div>
{% empty %}
<div class="no-results">
    很抱歉,没有找到与“{{urlParams.q}}”相关的结果。
</div>
{% endfor %}

<div class="pagination-area">
    {# 分页导航的代码同上 #}
    {% pagination pages with show="5" %}
        {% if pages.FirstPage %}<a class="{% if pages.FirstPage.IsCurrent %}active{% endif %}" href="{{pages.FirstPage.Link}}">首页</a>{% endif %}
        {% if pages.PrevPage %}<a href

相关文章

如何在AnQiCMS模板中实现内容分页显示,并自定义页码导航样式?

当网站内容日益丰富,如何高效地展示大量信息,同时确保用户友好的浏览体验,是网站运营中不可或缺的一环。在AnQiCMS中,通过强大的模板标签系统,我们可以轻松实现内容的分页显示,并灵活定制页码导航的样式,让网站内容既丰富又整洁。 --- ### 高效组织内容:实现内容列表的分页显示 在AnQiCMS的模板中,要实现内容的分页显示,核心在于使用`archiveList`标签来获取文档列表

2025-11-08

如何根据不同的排序规则(如最新、浏览量、自定义排序)显示文章列表?

在安企CMS中管理网站内容,灵活地控制文章列表的展示顺序对于提升用户体验和内容分发效率至关重要。无论是想让最新发布的内容立即呈现在访客眼前,还是突出最受欢迎的热门文章,抑或是根据特定的运营策略手动调整文章的排布,安企CMS都提供了简洁而强大的方式来实现这些需求。 安企CMS的核心优势之一,就是其直观且功能丰富的模板标签系统。在处理文章列表的显示时

2025-11-08

如何在文章列表或分类列表中根据推荐属性(如“头条”、“推荐”)筛选并显示文章?

在内容管理和网站运营中,如何有效突出重点信息,引导用户关注特定文章,是提升网站效果的关键。安企CMS(AnQiCMS)提供了灵活的推荐属性功能,让您可以轻松地在文章列表或分类列表中,根据“头条”、“推荐”等属性筛选并展示文章,从而更好地实现内容运营策略。 ## 理解推荐属性:内容运营的核心工具 在安企CMS的后台,当我们发布或编辑文章时,会看到一个名为“推荐属性”的选项

2025-11-08

如何在网站首页动态显示不同分组的Banner轮播图?

网站首页的Banner轮播图是吸引访问者目光、传达核心信息的重要窗口。通过巧妙地设置,我们可以让首页的Banner轮播图根据不同的营销目标或内容主题动态展示,这不仅能提升用户体验,也能有效引导用户浏览。安企CMS(AnQiCMS)提供了灵活的功能,帮助用户轻松实现这一需求。 ### 理解安企CMS的Banner机制 在安企CMS中,Banner的管理与展示有着清晰的逻辑

2025-11-08

如何在文章列表中实现根据自定义参数(如产品特性、价格区间)进行筛选?

在网站运营中,我们常常需要对内容列表进行更细致的分类和筛选,以帮助用户快速找到他们真正感兴趣的信息。传统的文章分类虽然能解决大部分问题,但当内容属性更加复杂,例如产品有多种特性、价格区间,或者活动有不同的主题和参与方式时,单一的分类就显得力不从心了。 幸运的是,安企CMS(AnQiCMS)凭借其灵活的内容模型和强大的模板标签,为我们提供了实现文章列表自定义参数筛选的有效途径

2025-11-08

如何在AnQiCMS模板中显示上一篇和下一篇文章的链接和标题?

在网站运营中,为访问者提供流畅的导航体验至关重要。当用户阅读完一篇文章时,自然会期待发现更多相关内容,而“上一篇”和“下一篇”链接正是满足这一需求的关键功能。它们不仅能提升用户在您网站上的停留时间,还能通过构建内部链接结构,对搜索引擎优化(SEO)产生积极影响。 AnQiCMS 为模板开发者提供了简洁高效的内置标签,让您能够轻松地在文章详情页面显示上一篇和下一篇文章的链接和标题。下面

2025-11-08

如何在文档详情页显示相关文档列表,如同分类推荐或基于关键词推荐?

在网站内容运营中,为访问者提供更多相关的、可能感兴趣的内容,是提升用户体验、延长网站停留时间并促进内容深度浏览的关键策略。这不仅能有效引导用户探索更多信息,也是搜索引擎优化(SEO)中“页面间关联性”的重要组成部分。在安企CMS(AnQiCMS)这样功能强大的内容管理系统中,实现文档详情页的相关文档列表展示,操作起来既灵活又高效。 安企CMS为我们提供了 `archiveList`

2025-11-08

如何在AnQiCMS模板中进行简单的数字算术运算,如加减乘除?

在安企CMS(AnQiCMS)中制作模板时,我们常常需要进行一些简单的数字计算,比如显示商品总价、计算文章阅读量百分比,或者处理列表中的序号。AnQiCMS 强大的模板引擎支持直接在模板中进行加减乘除等算术运算,让我们的内容展示更加灵活和动态。 ### 在模板中进行直接算术运算 AnQiCMS 的模板语法类似于 Django 模板引擎,当我们需要在模板中执行数学运算时,可以直接在双花括号

2025-11-08