使用ExpressionEngine中的Stash,Context和Categories

Nat*_*onn 4 expressionengine categories expressionengine-stash

我希望有一种方法可以将Stash Context与Categories结合使用,例如:

{exp:channel:entries channel="channel-name" dynamic="no" disable="member_data|pagination"}
    {exp:stash:append_list name='list' parse_tags="yes" save="yes" scope="site" context='{categories}{category_name}{/categories}'}
        {stash:this_title}{title}{/stash:this_title}
        {categories}
            {stash:this_category_name}
                {category_name}
            {/stash:this_category_name}
        {/categories}
    {/exp:stash:append_list}
{/exp:channel:entries}


{exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="{this_category_name}"}                   
    <div>
        all my stash variables and html etc.
    </div>
{/exp:stash:get_list}
Run Code Online (Sandbox Code Playgroud)

我知道我可以执行以下操作,这意味着每次添加类别时都需要编辑模板.

{exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="category1"}                  
    <div>
        all my stash variables and html etc.
    </div>
{/exp:stash:get_list}


{exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="category2"}                  
    <div>
        all my stash variables and html etc.
    </div>
{/exp:stash:get_list}
Run Code Online (Sandbox Code Playgroud)

话虽如此,我的问题是:无论如何动态使用Stash上下文和ExpressionEngine类别?

Jus*_*ell 7

您遇到的问题归结为exp:channel:entries循环运行多次迭代,然后使用Stash设置值的关联数组.一旦channel:entries竞争,你有一个{this_category_name}变量数组,所以它实际上从未像常规变量那样设置.

所以你真的有几个选择:

  1. 使用URI段,因为它们是早期解析的.
  2. 使用exp:stash:set标签设置一个片段类型变量,可以在页面上稍后解析.
  3. 硬编码值

这是我的代码,我已经测试过,并且可以确认我的工作100%.1警告,如果您的条目有多个类别,这将打破.我相信这将使用迭代中的第一个类别集.

注意,请务必使用process ="end"参数来操作解析顺序,否则最终会出现空白屏幕.

{exp:channel:entries channel="your-channel" dynamic="no" disable="member_data|pagination"}
    {exp:stash:append_list name='list' parse_tags="yes" save="yes" scope="site" context='{categories}{category_name}{/categories}'}
        {stash:this_title}{title}{/stash:this_title}
        {categories}
            {stash:this_category_name}
                {category_name}
            {/stash:this_category_name}

            {exp:stash:set name="test_var" type="snippet"}{category_name}{/exp:stash:set}
        {/categories}
    {/exp:stash:append_list}
{/exp:channel:entries}

{exp:stash:parse process="end"}

    {exp:stash:get_list name="list" parse_tags="yes" parse_conditionals="yes" context="{test_var}" process="end"}
        <div>
            all my stash variables and html etc.
        </div>
    {/exp:stash:get_list}

{/exp:stash:parse}
Run Code Online (Sandbox Code Playgroud)

我想补充一点,可能有更好的方法来解决你的问题.你想要做的事情的逻辑并没有真正加起来.我只是试图回答你关于Stash的问题,如果它可以做到这一点而不是最好的方式.