`archiveList`标签如何获取并显示AnQiCMS指定分类、模型的文档列表?

在安企CMS中,高效地管理和展示网站内容是提升用户体验和搜索引擎排名的关键。为了实现这一目标,我们经常需要根据特定的分类或内容模型来组织和显示文档列表。这时,archiveList标签就成为了我们手中强大的工具。它能帮助我们灵活地从数据库中提取所需内容,并以多样化的方式呈现。

archiveList标签:内容列表的指挥家

archiveList标签是安企CMS模板中用于获取和展示文档列表的核心标签。无论是博客文章、产品介绍、新闻资讯,还是任何自定义内容模型下的文档,它都能根据我们设定的条件进行精确筛选、排序和展示。这个标签的强大之处在于它的灵活性和丰富的参数选项,让我们能够像指挥家一样,调度网站上的所有内容。

让我们深入了解如何利用archiveList标签来获取并显示指定分类和模型下的文档列表。

精准定位:通过模型和分类筛选内容

在安企CMS中,内容模型(Module)就像是一个内容的“模具”,定义了不同类型内容的结构和字段(例如,“文章”模型可能有“作者”、“发布日期”字段,“产品”模型可能有“价格”、“库存”字段)。而分类(Category)则是内容的“档案柜”,用于对同类型或跨类型的内容进行归类整理。archiveList标签通过moduleIdcategoryId这两个关键参数,让我们可以精准地锁定目标内容。

  • 指定内容模型(moduleId 首先,如果您的网站有多种内容类型,比如文章和产品,您可以通过moduleId参数来指定要获取哪个内容模型下的文档。每个内容模型在后台都有一个唯一的ID。例如,如果您想获取所有“文章”模型的文档,通常会设置moduleId="1"(具体ID请根据您的后台实际配置为准)。这样,archiveList就只会拉取文章相关的数据,忽略其他模型的内容。

  • 筛选文档分类(categoryId 在确定了内容模型之后,我们往往还需要进一步细化到某个或某几个特定的分类。categoryId参数允许您指定一个或多个分类的ID。您可以传入单个ID,如categoryId="5",获取ID为5的分类下的所有文档。如果您需要获取多个分类的文档,可以用逗号将它们隔开,例如categoryId="5,8,12"。一个非常实用的技巧是,当您希望archiveList不要自动读取当前页面的分类ID,而是获取所有分类的文档时,可以明确指定categoryId="0"。反之,如果您正在一个分类页面,希望获取该分类及其子分类下的文档,通常无需指定categoryIdarchiveList会智能地读取当前页面的分类信息。

灵活展示:列表类型与显示数量

archiveList标签提供了多种列表展示类型,以适应不同的页面需求:

  • 非分页列表(type="list" 当您只需要在一个页面上展示少量内容,例如首页的新闻头条、侧边栏的热门产品等,可以使用type="list"。这种模式下,结合limit参数来控制显示文档的数量,例如limit="10"将显示最近的10条文档。limit还支持偏移量模式,如limit="2,10",表示从第2条文档开始获取,总共获取10条。

  • 分页列表(type="page" 对于需要展示大量内容且需要分页导航的页面,例如文章列表页、产品展示页,type="page"是理想的选择。在这种模式下,archiveList会根据当前页码和limit参数(同样用来定义每页显示数量)自动处理分页逻辑。当使用type="page"时,通常会搭配pagination标签来生成分页导航条,让用户能够轻松地浏览不同页的文档。

  • 相关文档(type="related" 在文档详情页,您可能希望展示一些与当前文档相关的推荐内容。这时,type="related"就派上用场了。它会智能地根据当前文档的关键词或关联设置,推荐相似或关联的文档。

排序与更多控制

除了上述核心参数,archiveList还提供了一系列参数来进一步精细化您的内容列表:

  • 排序方式(order 您可以根据自己的需求对文档进行排序。常用的排序方式包括按ID倒序(最新发布),如order="id desc";按浏览量倒序(最热门),如order="views desc";以及按后台自定义排序字段,如order="sort desc"

  • 排除特定分类(excludeCategoryId 如果您需要获取某个模型或分类下的所有文档,但希望排除其中的一两个分类,可以使用excludeCategoryId参数,例如excludeCategoryId="3,7"

  • 包含子分类内容(child child参数默认为true,表示获取指定分类时,会同时包含其子分类下的文档。如果您只想获取当前分类本身(不含子分类)的文档,可以将其设置为child=false

  • 推荐属性(flag 安企CMS允许为文档设置多种推荐属性,如头条[h]、推荐[c]等。您可以使用flag="c"来只获取带有“推荐”属性的文档。

实践示例:构建动态文档列表

为了更好地理解这些参数的组合使用,我们来看几个常见的实际应用场景。

场景一:显示特定分类下的最新文章列表

假设您有一个分类ID为8的“公司新闻”分类,并且希望在首页展示最新的5条新闻:

<div>
    <h3>最新公司新闻</h3>
    <ul>
    {% archiveList latestNews with moduleId="1" categoryId="8" type="list" limit="5" order="id desc" %}
        {% for item in latestNews %}
        <li>
            <a href="{{item.Link}}">{{item.Title}}</a>
            <span>{{stampToDate(item.CreatedTime, "2006-01-02")}}</span>
        </li>
        {% empty %}
        <li>暂无公司新闻。</li>
        {% endfor %}
    {% endarchiveList %}
    </ul>
</div>

这里,moduleId="1"假定为文章模型,categoryId="8"指定了“公司新闻”分类,type="list"limit="5"控制了显示数量,order="id desc"确保是最新的内容。

场景二:展示带分页的产品列表

在一个产品展示页面,您可能需要按页显示所有产品,并提供分页导航:

<div class="product-list-container">
    {% archiveList products with moduleId="2" type="page" limit="12" order="views desc" %}
        {% for item in products %}
        <div class="product-item">
            <a href="{{item.Link}}">
                <img src="{{item.Thumb}}" alt="{{item.Title}}">
                <h4>{{item.Title}}</h4>
                <p>浏览量: {{item.Views}}</p>
            </a>
        </div>
        {% empty %}
        <p>暂无产品信息。</p>
        {% endfor %}
    {% endarchiveList %}

    <div class="pagination-area">
        {% pagination pages with show="5" %}
            <a href="{{pages.FirstPage.Link}}">首页</a>
            {% if pages.PrevPage %}<a href="{{pages.PrevPage.Link}}">上一页</a>{% endif %}
            {% for item in pages.Pages %}<a class="{% if item.IsCurrent %}active{% endif %}" href="{{item.Link}}">{{item.Name}}</a>{% endfor %}
            {% if pages.NextPage %}<a href="{{pages.NextPage.Link}}">下一页</a>{% endif %}
            <a href="{{pages.LastPage.Link}}">尾页</a>
        {% endpagination %}
    </div>
</div>

在这个例子中,moduleId="2"假定为产品模型,type="page"启用了分页,limit="12"定义了每页显示12个产品,order="views desc"则按浏览量降序排列。随后的pagination标签生成了完整的翻页链接。

场景三:复杂的多级分类与文档混合展示

假设您需要在首页展示顶级分类(如“解决方案”)及其下的子分类,并在每个子分类下显示其对应的产品文档,如果没有子分类则直接显示顶级分类下的产品文档。

<div class="category-product-display">
    {% categoryList topCategories with moduleId="2" parentId="0" %} {# 获取顶级产品分类 #}
        {% for topCat in topCategories %}
        <section>
            <h2><a href="{{topCat.Link}}">{{topCat.Title}}</a></h2>
            <div class="sub-category-or-products">
                {% if topCat.HasChildren %} {# 如果有子分类,则显示子分类 #}
                    {% categoryList subCategories with parentId=topCat.Id %}
                        {% for subCat in subCategories %}
                        <div class="sub-category-block">
                            <h3><a href="{{subCat.Link}}">{{subCat.Title}}</a></h3>
                            <ul>
                                {% archiveList subCatProducts with type="list" categoryId=subCat.Id limit="4" %} {# 显示子分类下的产品 #}
                                    {% for product in subCatProducts %}
                                    <li><a href="{{product.Link}}">{{product.Title}}</a></li>
                                    {% empty %}
                                    <li>暂无产品。</li>
                                    {% endfor %}
                                {% endarchiveList %}
                            </ul>
                        </div>
                        {% endfor %}
                    {% endcategoryList %}
                {% else %} {# 如果没有子分类,直接显示顶级分类下的产品 #}
                    <ul>
                        {% archiveList topCatProducts with type="list" categoryId=topCat.Id limit="8" %}
                            {% for product in topCatProducts %}
                            <li><a href="{{product.Link}}">{{product.Title}}</a></li>
                            {% empty %}
                            <li>暂无产品。</li>
                            {% endfor %}
                        {% endarchiveList %}
                    </ul>
                {% endif %}
            </div>
        </section>
        {% endfor %}
    {% endcategoryList %}
</div>

这个例子展示了archiveListcategoryList标签的嵌套使用,并结合了if条件判断来处理有无子分类的不同展示逻辑,极大地增强了模板的动态性和灵活性。

总结

archiveList标签是安企CMS内容运营的强大基石。通过熟练掌握其各类参数,并结合其他辅助标签(如categoryDetailpagination等),您能够轻松地构建出结构清晰、功能强大且内容丰富多样的网站页面。灵活运用这些标签,将有助于提升您网站的内容组织能力和用户浏览体验。


常见问题 (FAQ)

Q1: 我如何知道一个分类的ID或内容模型的ID?

A1: 在安企CMS后台,您可以轻松找到这些ID。 对于分类ID:进入“内容管理” -> “文档分类”,在分类列表中,每条分类的名称旁边通常会显示其ID,或者点击“编辑”进入详情页面也能看到。 对于内容模型ID:进入“内容管理” -> “内容模型”,在模型列表中,每个模型的名称旁边也会显示其ID。这些ID是您在模板中使用moduleIdcategoryId参数时的依据。

Q2: type="list"type="page"在使用archiveList标签时有什么核心区别?

A2: 它们的主要区别在于是否处理分页逻辑。 type="list":主要用于获取一个固定数量的文档列表,不涉及分页。您需要通过limit参数明确指定要显示的文档数量。如果文档数量超出limit,多余的文档将不会被显示,且不会有分页导航。 type="page":用于获取支持分页的文档列表。它会根据当前的URL参数(如页码)自动计算并显示当前页的文档,并提供总页数、当前页