在网站内容的呈现中,我们常常需要根据不同的情况来决定哪些信息应该展示给访问者,哪些应该暂时隐藏。安企CMS(AnQiCMS)提供了灵活的模板条件判断逻辑,让内容的显示与隐藏变得直观而高效。通过这些判断,您可以轻松实现个性化的页面布局、权限控制下的内容显示、以及根据数据状态调整页面元素等多种需求,极大地增强了网站的动态性和用户体验。
安企CMS的模板系统采用了类似Django模板引擎的语法,这使得条件判断的结构清晰且易于理解。核心的条件判断语句是 {% if ... %}。它允许您检查某个条件是否为真,并根据结果执行相应的代码块。
安企CMS 中的条件判断语法:核心基石
最基本的条件判断结构是 {% if 条件 %} ... {% endif %}。当 条件 表达式评估为真时, if 和 endif 之间的内容就会被显示。
如果需要处理更复杂的逻辑,可以引入 {% elif 其他条件 %} 和 {% else %}。elif 允许您添加更多的判断分支,而 else 则作为所有条件都不满足时的默认处理。
{# 简单条件判断 #}
{% if archive.Id == 10 %}
<p>这是ID为10的特别文章。</p>
{% endif %}
{# 包含多个分支的判断 #}
{% if user.is_admin %}
<p>欢迎,管理员!</p>
{% elif user.is_vip %}
<p>尊贵的VIP用户,您好!</p>
{% else %}
<p>普通用户,请登录。</p>
{% endif %}
在这里,“条件”可以是各种表达式,包括变量、比较操作(如 ==、!=、>、<、>=、<=)、逻辑操作(and、or、not),甚至是某些函数或过滤器返回的结果。
常见应用场景与实用示例
了解了基本语法后,我们来看看在实际的安企CMS模板开发中,如何运用这些条件判断来控制内容的显示。
1. 基于变量是否存在或是否为空
这是最常用的场景之一。很多时候,我们希望只有当某个数据存在时才展示相关内容,例如文章有缩略图才显示,或者某个系统设置项被配置了才显示。在安企CMS模板中,一个变量如果不存在、为空字符串、为 nil、为 false、为零(数字)、或为空数组/切片,都会被视为 false。
{# 判断文章是否有缩略图 #}
{% if archive.Thumb %}
<img src="{{ archive.Thumb }}" alt="{{ archive.Title }}"/>
{% else %}
<span>此文章暂无缩略图。</span>
{% endif %}
{# 判断网站备案号是否配置 #}
{% system siteIcp with name="SiteIcp" %}
{% if siteIcp %}
<p>备案号:<a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">{{ siteIcp }}</a></p>
{% else %}
{# 不显示备案号区域 #}
{% endif %}
2. 基于特定值进行判断
您可能需要根据变量的具体值来显示不同的内容。例如,友情链接是否需要添加 rel="nofollow" 属性,或者根据当前页面语言显示不同的文案。
{# 友情链接根据后台设置决定是否添加nofollow #}
{% linkList friendLinks %}
{% if friendLinks %}
<ul>
{% for item in friendLinks %}
<li><a href="{{ item.Link }}" {% if item.Nofollow == 1 %} rel="nofollow" {% endif %} target="_blank">{{ item.Title }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% endlinkList %}
{# 根据系统语言显示不同内容 (假设您在后台设置了Language字段) #}
{% system currentLang with name="Language" %}
{% if currentLang == "zh-CN" %}
<p>欢迎来到中文站!</p>
{% elif currentLang == "en-US" %}
<p>Welcome to our English site!</p>
{% else %}
<p>语言未知。</p>
{% endif %}
3. 逻辑组合判断
当单个条件不足以表达您的需求时,可以使用 and、or 和 not 来组合多个条件,构建更复杂的逻辑。
{# 判断分类既有子分类,且子分类下有文章,才显示特定布局 #}
{% categoryList currentCategory with parentId="0" %} {# 获取当前分类,假设它是一个父级分类 #}
{% if currentCategory.HasChildren and currentCategory.ArchiveCount > 0 %}
<h3>包含子分类和文章的模块</h3>
{# ... 展示子分类和文章的复杂布局 ... #}
{% else %}
<h3>普通分类模块</h3>
{# ... 展示普通分类内容 ... #}
{% endif %}
{# 判断如果没有Logo图片,且网站名称不为空,则显示网站名称作为Logo替代 #}
{% system siteLogo with name="SiteLogo" %}
{% system siteName with name="SiteName" %}
{% if not siteLogo and siteName %}
<h1>{{ siteName }}</h1>
{% elif siteLogo %}
<img src="{{ siteLogo }}" alt="{{ siteName }}"/>
{% endif %}
4. 循环中的条件判断
在 for 循环中,条件判断同样非常有用。例如,为循环中的第一个元素添加特殊的样式,或者处理空列表的情况。
{% archiveList archives with type="list" limit="5" %}
<ul>
{% for item in archives %}
{# 为第一个列表项添加'active'类名 #}
<li {% if forloop.Counter == 1 %}class="active"{% endif %}>
<a href="{{ item.Link }}">{{ item.Title }}</a>
</li>
{% empty %}
{# 如果archives列表为空,显示此内容 #}
<li>暂无文章可显示。</li>
{% endfor %}
</ul>
{% endarchiveList %}
这里的 forloop.Counter 是一个特殊的变量,表示当前循环的迭代次数(从1开始)。{% empty %} 块则是在 for 循环迭代对象为空时执行的特殊判断,它使得您无需单独的 if archives 判断。
5. 利用过滤器增强条件判断
安企CMS模板提供了丰富的过滤器,可以将它们与条件判断结合使用,实现更精细的控制。例如,判断字符串长度、是否包含特定子串等。
{# 判断文章描述的长度,决定是否显示“阅读更多” #}
{% archiveDetail archiveDesc with name="Description" %}
{% if archiveDesc|length > 100 %}
<p>{{ archiveDesc|truncatechars:100 }}...</p>
<a href="{{ archive.Link }}">阅读更多</a>
{% else %}
<p>{{ archiveDesc }}</p>
{% endif %}
{# 判断文章标题是否包含特定关键词,例如“促销” #}
{% archiveList archives with type="list" limit="3" %}
{% for item in archives %}
<li>
{% if item.Title|contain:"促销" %}
<span style="color: red;">【促销】</span>
{% endif %}
<a href="{{ item.Link }}">{{ item.Title }}</a>
</li>
{% endfor %}
{% endarchiveList %}
优化与注意事项
在使用条件判断时,有几个小技巧可以帮助您保持模板的整洁和高效:
- 保持简洁: 避免过于复杂的嵌套条件,这会降低代码的可读性。如果逻辑变得非常复杂,可以考虑是否能在控制器层预处理数据,或者拆分成更小的逻辑块。
- 注意空白字符: 模板标签本身可能会在输出中引入不必要的