CMS主题开发中能否在不同页面过滤展示指定Twig block?
Twig 分页面显示Block实现方案
完全可以通过Twig代码实现该需求,以下是两种实现方案,优先推荐第一种更稳定的方案:
最优方案:基于CMS内置页面属性判断(推荐)
该方案比URL判断稳定性更高,不会因为域名修改、页面别名调整、URL加查询参数导致判断失效,实现步骤如下:
- 首先在当前Twig模板中加入调试代码,查看CMS注入的全局上下文变量,找到页面唯一标识字段:
{{ dump(_context) }} - 通常主流CMS都会提供
page.id(页面唯一ID)、page.slug(页面别名)、page.type(页面类型)这类固定字段,例如你要显示的A页面slug为a-page,直接给对应Block加判断逻辑即可:
{# 仅在slug为a-page的页面显示该Block #} {% if page.slug == 'a-page' %} {% block your_custom_block %} <!-- 这里放你要渲染的Block内容 --> {% endblock %} {% endif %}
如果是同一类页面都要显示该Block,直接用page.type字段判断即可,后续新增同类型页面无需修改判断规则。
备选方案:基于URL判断
如果找不到对应的CMS内置页面标识,可以用URL匹配实现,示例代码如下:
{# 匹配当前页面路径为/a-page/的情况,可根据自己的URL规则调整匹配逻辑 #} {% if app.request.getPathInfo() == '/a-page/' %} {% block your_custom_block %} <!-- 这里放你要渲染的Block内容 --> {% endblock %} {% endif %}
注意:该方案需要尽可能精准匹配URL规则,避免带查询参数、多域名访问时出现判断错误
内容的提问来源于stack exchange,提问作者Mike Edwards
相关产品推荐
相关产品推荐

