在AnQiCMS中,想要在网站模板里展示所有单页面的列表和链接,其实是一个非常常见的需求,比如您可能想在网站底部放置一个“网站地图”或者“快速链接”区域,又或者需要在侧边栏列出所有的“服务项目”单页。AnQiCMS提供了一个简单而强大的模板标签,让您能够轻松实现这一点。

理解单页面及其作用

在AnQiCMS中,单页面(Page)通常用于发布那些内容相对固定、不需要分类管理但又不可或缺的信息,例如“关于我们”、“联系方式”、“隐私政策”、“服务条款”等等。每个单页面都有自己的独立URL、标题和内容,您可以在后台的“页面资源”->“页面管理”中进行创建和编辑。

核心:pageList 模板标签

要获取所有单页面的列表,您需要使用AnQiCMS内置的pageList模板标签。这个标签的设计非常直观,它会帮您从数据库中提取所有已发布的单页面数据,并提供给模板进行遍历和展示。

使用pageList标签的基本结构通常是这样的:

{% pageList pages %}
    {# 循环遍历每一个单页面 #}
    {% for item in pages %}
        {# 在这里展示每个单页面的信息 #}
    {% endfor %}
{% endpageList %}

在这里,pages是一个临时的变量名称,它会承载所有获取到的单页面数据。您可以根据自己的喜好将其命名为singlePagesmyPages等,只要在for循环中保持一致即可。

获取单页面的具体信息

{% for item in pages %}这个循环内部,item变量就代表了当前的每一个单页面。通过item,您可以访问到该单页面的各种属性,包括:

  • item.Id: 单页面的唯一ID。
  • item.Title: 单页面的标题,这是最常用于显示在列表中的文字。
  • item.Link: 单页面的访问链接,用于构建可点击的URL。
  • item.Description: 单页面的简要描述,有时也用于列表项的补充说明。
  • item.Content: 单页面的完整内容(但通常不在列表中直接显示)。
  • item.Logo: 单页面的大图或封面图地址。
  • item.Thumb: 单页面的缩略图地址。

在模板中构建单页面列表

现在,让我们通过一个具体的例子来看看如何将这些信息展示出来。您可以将下面的代码片段放置在您希望显示单页面列表的任何模板文件里,比如footer.html(网站底部模板)、sidebar.html(侧边栏模板)或者一个专门的sitemap.html页面。

<div class="site-quick-links">
    <h3>快速链接</h3>
    <ul>
        {% pageList pages %}
            {% for item in pages %}
                {# 这里的 {{ item.Link }} 会自动生成单页面的完整访问地址 #}
                {# 这里的 {{ item.Title }} 就是您在后台为单页面设置的标题 #}
                <li>
                    <a href="{{ item.Link }}" title="访问 {{ item.Title }}">
                        {{ item.Title }}
                    </a>
                    {% if item.Description %}
                        <p class="page-description">{{ item.Description|truncatechars:80 }}</p> {# 如果有描述,截取前80个字符显示 #}
                    {% endif %}
                </li>
            {% empty %}
                {# 当没有任何单页面时,显示此提示 #}
                <li>目前还没有可展示的单页面。</li>
            {% endfor %}
        {% endpageList %}
    </ul>
</div>

在这个例子中,我们创建了一个无序列表(<ul>),每一个列表项(<li>)包含了一个指向单页面的链接。链接的文本就是单页面的标题,并且如果该单页面有填写描述,我们还会截取一部分描述文字进行展示。

进阶使用与小技巧

  • 排除特定页面:有时候您可能不想在列表中显示所有的单页面。例如,如果“联系我们”页面已经在主导航中,您可能想在底部快速链接中排除它。您可以使用if条件判断来实现:

    {% pageList pages %}
        {% for item in pages %}
            {# 假设ID为5的单页面是“联系我们”,或者标题为“旧版本说明” #}
            {% if item.Id != 5 and item.Title != '旧版本说明' %}
                <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
            {% endif %}
        {% endfor %}
    {% endpageList %}
    

    建议使用item.Id进行排除,因为ID是唯一的且通常不会改变,比依赖标题更稳定。

  • 样式控制:为了让列表看起来更美观,您可以给divullia等HTML标签添加自定义的CSS类(如示例中的site-quick-linkspage-description),然后在您的CSS文件中定义这些类的样式。

  • 空状态处理{% empty %}标签非常实用,它可以在pageList没有找到任何单页面时,显示一个友好的提示信息,避免页面出现空白或者报错。

通过pageList标签,您就可以在AnQiCMS模板中灵活地展示和管理所有的单页面列表和链接,为您的网站提供更好的导航和用户体验。


常见问题解答 (FAQ)

Q1: pageList标签可以筛选特定分类的单页面吗?例如只显示“关于”类别的单页面。

A1: pageList标签的设计初衷是用于获取所有已发布的单页面,它本身并不支持根据分类或其他自定义字段进行直接筛选。如果需要筛选,您可以在for循环内部使用if语句进行条件判断。例如,如果您在单页面内容或描述中约定了“类别”关键词,或者通过单页面的ID或标题来识别, then您可以根据item.Descriptionitem.Title来排除或只显示特定页面。

Q2: 如果我的网站有大量单页面,这样全部列出会影响网站性能吗?

A2: AnQiCMS基于Go语言开发,以其高性能和高并发特性著称。对于常规数量的单页面(例如几十到几百个),pageList标签的性能影响通常可以忽略不计。系统会高效地从数据库中获取数据。但在极端情况下,如果您的网站单页面数量极其庞大(数千甚至上万),且在同一页面全部列出确实可能增加页面渲染时间。对于这种情况,您可能需要考虑在前端使用JavaScript进行分页显示,或者重新评估设计需求,看看是否所有页面都确实需要在同一个列表一次性展示。

Q3: 我可以在单页面列表中除了标题和链接外,还显示缩略图或简介吗?

A3: 完全可以。如文章中提到的,在{% for item in pages %}循环中,您不仅可以访问item.Titleitem.Link,还可以获取item.Description(简介)、item.Logo(大图)和item.Thumb(缩略图)等字段。您可以根据模板设计的需要,自由地组合这些信息来丰富您的单页面列表展示。例如,添加一个<img>标签来显示缩略图,或者在链接下方显示一段简短的描述文字。