安企CMS的`pageList`标签如何显示所有单页面列表,并排除特定页面?

安企CMS是一款灵活高效的内容管理系统,它为我们的网站运营提供了强大的支持,无论是发布文章、管理产品,还是创建各种单页面,都显得游刃有余。今天,我们就来聊聊在使用安企CMS管理单页面时,一个非常实用的技巧:如何通过pageList标签显示所有单页面,同时又能够精准地排除掉那些我们不希望展示的特定页面。

在日常的网站运营中,我们经常会创建一些“关于我们”、“联系方式”、“隐私政策”等单页面。大多数时候,我们希望在导航菜单或某个区域统一列出这些页面,方便用户访问。安企CMS为此提供了一个便捷的模板标签——pageList,它能帮助我们轻松获取网站中所有的单页面列表。

pageList标签的基础用法

要获取网站的所有单页面列表,pageList标签的使用方式非常直观。我们通常会这样编写模板代码:

{% pageList pages %}
    <ul class="page-nav">
    {% for item in pages %}
        <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
    {% endfor %}
    </ul>
{% endpageList %}

在这段代码中,{% pageList pages %}会从后台数据库中获取所有的单页面数据,并将其存储在名为pages的变量中。接着,我们使用{% for item in pages %}循环遍历这个pages列表,item就代表了列表中的每一个单页面。通过{{ item.Link }}我们可以获取页面的链接,而{{ item.Title }}则可以显示页面的标题。这样,一个包含所有单页面的导航列表就呈现在我们面前了。

灵活定制:排除特定页面

虽然pageList能够列出所有页面很方便,但实际运营中,我们可能会遇到这样的需求:有些单页面,比如内部草稿、临时活动页、或是一些仅供特定链接访问而不希望出现在通用列表中的页面,我们不希望它们出现在由pageList生成的列表中。

安企CMS的pageList标签本身并没有提供直接的“排除ID”参数,但它的模板引擎非常灵活,允许我们在遍历列表时进行条件判断,从而实现定制化的内容展示。这正是我们排除特定页面的关键。

我们可以通过在for循环内部添加if条件判断,来检查当前遍历到的页面是否是我们想要排除的页面。如果符合排除条件,我们就跳过这个页面,不让它显示出来。最常用的判断依据是页面的ID,因为页面ID是唯一且稳定的标识符。

操作步骤:

  1. 获取要排除的页面ID: 登录安企CMS后台,进入“页面资源”下的“页面管理”。在这里,你可以看到每个单页面的“ID”列。记下你想要排除的页面的ID。

  2. 在模板中加入排除逻辑: 假设我们要排除ID为1(例如“关于我们”的早期版本,或一个内部测试页)和ID为5(例如“特别活动登录页”)的页面。我们可以修改上面的模板代码,加入if判断:

    {% pageList pages %}
        <ul class="page-nav">
        {% for item in pages %}
            {# 判断当前页面的ID是否为1或5。如果是,则不显示它 #}
            {% if not (item.Id == 1 or item.Id == 5) %}
            <li class="page-item">
                <h3 class="page-title"><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                {# 你还可以根据需要显示更多页面信息,例如缩略图或简介 #}
                {% if item.Thumb %}
                <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="page-thumb">
                {% endif %}
                <p class="page-description">{{ item.Description|truncatechars:100 }}</p>
                <a href="{{ item.Link }}" class="read-more">查看详情</a>
            </li>
            {% endif %}
        {% endfor %}
        </ul>
    {% endpageList %}
    

    在这段修改后的代码中,{% if not (item.Id == 1 or item.Id == 5) %}这行是核心。它首先检查当前页面的ID(item.Id)是否等于15。如果等于其中任何一个,那么item.Id == 1 or item.Id == 5这个条件就会为真,前面的not会将其反转为假,从而跳过<li>...</li>这段代码,该页面就不会被渲染出来。只有当页面的ID既不是1也不是5时,not (...)条件才为真,页面内容才会被正常显示。

    如果你只想排除一个页面,代码会更简洁:{% if item.Id != 1 %}

实际应用场景的考量

这种排除特定页面的方式在许多场景下都非常有用:

  • 草稿或测试页面: 网站在开发或内容更新期间,可能存在一些未完成或正在测试的单页面,我们不希望它们被用户误点。
  • 非公开页面: 某些单页面可能仅供内部使用,或者通过特定的推广链接访问,无需在公共导航中露出。
  • 冗余或过期页面: 如果网站存在一些内容已合并或过时的单页面,但出于历史数据或SEO考虑暂时不便删除,我们也可以将其从主列表中排除。

通过这种方式,我们可以在不修改核心标签功能的前提下,灵活地控制内容的展示,让pageList标签在保持其便利性的同时,也更贴合我们精细化的运营需求。


常见问题解答 (FAQ)

1. 除了通过ID,我还能通过其他方式排除页面吗? 当然可以。每个item(单页面)对象除了Id,还包含Title(标题)、Link(链接)、Description(描述)等字段。你可以根据这些字段进行判断。例如,如果你想排除标题中包含“内部”字样的页面,可以使用{% if not (item.Title|contain:"内部") %}。不过,使用Id通常是最稳定和推荐的方式,因为ID是唯一的数字标识,不易受内容修改或URL结构调整的影响。

2. 如果我想排除的页面非常多,一个一个写or会不会很麻烦? 当需要排除的页面ID数量较多时,使用or连接确实会使代码变得冗长。一种更简洁的写法是,你可以先在一个变量中定义一个需要排除的ID列表,然后检查item.Id是否包含在这个列表中。例如,{% set exclude_ids = [1, 5, 10, 12] %},然后在循环中判断{% if not (item.Id in exclude_ids) %}。这样能大大提高代码的可读性和维护性。

3. 这个排除逻辑是动态的吗?如果我改变了页面在后台的状态(比如设为草稿),它会立即在列表中生效吗? 是的,这个排除逻辑是动态的。每次用户访问页面时,安企CMS都会实时执行模板代码来生成内容。这意味着,如果你在后台修改了页面的ID,或者改变了某个用于判断的字段内容(如标题),这些更改会立即反映在pageList生成的列表中,只要它们触发了你设置的if条件。不需要手动清除缓存。