在安企CMS的模板开发中,根据当前页面的类型(是文章详情页还是分类列表页)来显示不同的内容,是一个非常常见的需求。这不仅能让网站的用户体验更加个性化,也能在SEO优化方面提供更精细的控制。幸运的是,安企CMS强大的模板引擎提供了直观的方式来判断当前页面的上下文,并据此进行条件渲染。
理解安企CMS的模板上下文
安企CMS的模板引擎非常智能,它在渲染页面时,会根据当前URL和数据模型自动加载相关的上下文信息。这意味着,当你在一个文章详情页时,模板会自动“知道”这是一篇文章;当你在一个分类列表页时,它也同样会“知道”这是一个分类。我们可以巧妙地利用其内置的标签和逻辑判断,来判断当前页面的具体类型。
判断当前页面是否为文章详情页
判断当前页面是否为文章详情页,最直接有效的方法是尝试获取当前页面的文章详情数据。安企CMS提供了archiveDetail标签,默认情况下,它会尝试获取当前页面的文章数据。如果当前页面确实是一个文章详情页,那么通过这个标签获取到的文章ID就会有值。
我们可以在模板中这样进行判断:
{%- archiveDetail currentArchiveId with name="Id" %}
{% if currentArchiveId %}
{# 这里是文章详情页特有的内容 #}
<div class="article-detail-header">
<h1>{% archiveDetail with name="Title" %}</h1>
<p>发布时间:{% archiveDetail with name="CreatedTime" format="2006-01-02" %}</p>
{# 可以在文章详情页显示返回其所属分类列表的链接 #}
{%- archiveDetail articleCategory with name="Category" %}
{%- if articleCategory %}
<a href="{{ articleCategory.Link }}" class="back-to-category">返回 {{ articleCategory.Title }} 列表</a>
{%- endif %}
</div>
<div class="article-content">
{%- archiveDetail articleContent with name="Content" %}
{{ articleContent|safe }} {# 使用safe过滤器确保HTML内容正确渲染 #}
</div>
{# 可以在这里添加“上一篇/下一篇”导航、相关推荐等 #}
<div class="navigation">
{% prevArchive prev %}
{% if prev %}<a href="{{ prev.Link }}">上一篇:{{ prev.Title }}</a>{% else %}<span>没有上一篇了</span>{% endif %}
{% endprevArchive %}
{% nextArchive next %}
{% if next %}<a href="{{ next.Link }}">下一篇:{{ next.Title }}</a>{% else %}<span>没有下一篇了</span>{% endif %}
{% endnextArchive %}
</div>
{% endif %}
在这段代码中,我们首先使用{%- archiveDetail currentArchiveId with name="Id" %}尝试获取当前文章的ID并赋值给currentArchiveId变量。{%-的使用是为了避免在实际渲染时产生多余的空白行。如果currentArchiveId变量有值(即{% if currentArchiveId %}条件为真),就说明当前页面是一个文章详情页,我们就可以在此代码块内显示所有文章详情页特有的内容。
判断当前页面是否为分类列表页
如果当前页面不是文章详情页,我们接下来需要判断它是不是一个分类列表页。安企CMS提供了categoryDetail标签,同样地,它在未指定id参数时,也会尝试获取当前页面的分类数据。如果当前页面是一个分类列表页,那么通过这个标签获取到的分类ID就会有值。
为了避免判断冲突(一个页面既有文章ID又有分类ID,但我们想优先识别为文章详情),这个判断通常会放在文章详情页判断之后。
”`twig {%- categoryDetail currentCategoryId with name=“Id” %}
{% if currentCategoryId %}
{# 这里是分类列表页特有的内容 #}
<div class="category-list-header">
<h1>{% categoryDetail with name="Title" %}</h1>
<p>{% categoryDetail with name="Description" %}</p>
{# 显示分类Banner图,如果存在的话 #}
{%- categoryDetail categoryBanner with name="Images" %}
{%- if categoryBanner %}
<img src="{{ categoryBanner[0] }}" alt="{% categoryDetail with name='Title' %}" class="category-banner">
{%- endif %}
</div>
<ul class="article-list">
{% archiveList archives with type="