You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OctoberCMS博客组件中currentCategorySlug无法传递至宏的问题求助

解决OctoberCMS博客分类宏中currentCategorySlug传递问题

我之前也碰到过这个Twig宏作用域的坑!OctoberCMS用的Twig模板里,宏有自己独立的作用域,外部变量默认没法直接在宏里访问,这就是你currentCategorySlug传不进去的原因。

问题分析

你原来的代码里,虽然在调用宏前set了currentCategorySlug,但宏内部并没有接收这个变量作为参数,反而自己重新set了一遍——这相当于在宏的局部作用域里创建了一个新变量,根本拿不到外部的当前分类slug值,所以子分类的active状态判断自然失效。

修复步骤

只需要把currentCategorySlug明确作为参数传递给宏,包括宏内部递归调用自己的时候:

  1. 修改宏的定义,添加参数
    把宏的定义改成接收categories和currentCategorySlug两个参数:
{% macro render_cats(categories, currentCategorySlug) %}
  1. 递归调用宏时传递参数
    在宏内部处理子分类的时候,调用自己要带上currentCategorySlug:
{{ list.render_cats(category.children, currentCategorySlug) }}
  1. 外部调用宏时传递参数
    在partial的主代码里调用宏的时候,也要把外部的currentCategorySlug传进去:
{{ list.render_cats(categories, currentCategorySlug) }}

完整修改后的代码

{% import _self as list %}

{% macro render_cats(categories, currentCategorySlug) %}
    {% import _self as list %}
    {% for category in categories %}
        {% set postCount = category.post_count %}
        <li class="{{ category.slug == currentCategorySlug ? 'active' }}">
            <a href="{{ category.url }}">{{ category.name }}</a>
            {% if postCount %}
                <span>{{ postCount }}</span>
            {% endif %}
        </li>
        {% if category.children|length > 0 %}
            <ul>
                {{ list.render_cats(category.children, currentCategorySlug) }}
            </ul>
        {% endif %}
    {% endfor %}
{% endmacro %}

<div>
    <h3>Categories</h3>
    {% if blogCategories.categories|length > 0 %}
        <ul>
            {% set categories = blogCategories.categories %}
            {% set currentCategorySlug = blogCategories.currentCategorySlug %}
            {{ list.render_cats(categories, currentCategorySlug) }}
        </ul>
    {% else %}
        <p>No categories were found.</p>
    {% endif %}
</div>

这样修改后,宏就能正确拿到当前分类的slug,子分类的active状态就能正常判断了。

内容的提问来源于stack exchange,提问作者Charis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:02:39