Jekyll中if-else过滤器语法失效:需按需加载flip-cards脚本
解决Jekyll中flip-cards组件脚本的条件加载问题
我明白你遇到的问题了——Liquid的if语句里直接用过滤器确实会出问题,因为它的语法规则不允许在条件判断里直接串联过滤器。咱们一步步来解决:
原代码的问题
你原来的写法:
{% if page.flip-cards.items | size > 0 %} {% include cards-scripts.html %} {% endif %}
错误在于Liquid会把page.flip-cards.items | size > 0当成一个整体,没办法正确解析过滤器的逻辑,导致条件判断失效。
方案1:先赋值变量再判断
最稳妥的方式是先用assign把items的数量存成变量,再在if里判断这个变量:
{% assign flip_card_item_count = page.flip-cards.items | size %} {% if flip_card_item_count > 0 %} {% include cards-scripts.html %} {% endif %}
这样Liquid会先处理过滤器得到正确的数量,再进行大于0的判断,完全符合语法规则。
方案2:直接判断组件是否激活(更贴合你的需求)
如果你的CMS在激活flip-cards组件时,会自动给page对象添加flip-cards属性(不管items有没有内容),那你其实可以不用判断items数量,直接检查这个属性是否存在就行——这更贴合你“仅在组件激活时加载脚本”的需求:
{% if page.flip-cards %} {% include cards-scripts.html %} {% endif %}
这种写法更简洁,也避免了处理items可能为空的情况,只要组件被激活,脚本就会加载。
补充:关于你提到的“移除过滤器用do...”
你说的应该是通过assign(也就是Liquid里的赋值操作)来替代直接在if里用过滤器的写法,上面的方案1就是这种思路,把过滤后的结果先存到变量里,再用变量做判断,完全避开了原写法的语法陷阱。
内容的提问来源于stack exchange,提问作者Telo Santos
相关产品推荐
相关产品推荐

