使用Stash出现空白输出

3
我终于在一个项目中尝试使用Stash(版本2.3.5,运行于EE 2.5.3),以确认它是否像大家所说的那样好用。
我已经尽可能地按照文档说明进行了操作,并将Stash设置在页面头部,如下所示:
{exp:channel:entries channel="homepage" limit="1" dynamic="no"}
{exp:stash:set_list name="homepage"}
    {stash:cf_homepage_main_intro}{cf_homepage_main_intro}{/stash:cf_homepage_main_intro}
    {stash:cf_homepage_strapline}{cf_homepage_strapline}{/stash:cf_homepage_strapline}

    {cf_homepage_contact_info}
        {stash:mx_pinterest}{mx_pinterest}{/stash:mx_pinterest}
        {stash:mx_facebook}{mx_facebook}{/stash:mx_facebook}
        {stash:mx_twitter}{mx_twitter}{/stash:mx_twitter}
        {stash:mx_tel}{mx_tel}{/stash:mx_tel}
        {stash:mx_email}{mx_email}{/stash:mx_email}
        {stash:mx_address}{mx_address}{/stash:mx_address}
    {/cf_homepage_contact_info}
{/exp:stash:set_list}
{/exp:channel:entries}

然后在我的模板的其余部分,我试图按以下方式调用这些值:

{exp:stash:homepage:mx_tel}

然而,我什么都没有得到。
如果我直接输出字段名,它们可以正常工作,我也打开了调试模式,我可以看到stash设置值的时刻,所有的东西看起来都很好,然而调试器报告如下信息:
*Stash: RETRIEVED homepage:mx_email with value*
我有点茫然不知所措... 有人有任何指示吗?
谢谢,
卡尔

好的 - 我已经对它进行了调整,现在使用 {exp:stash:set} 和 {exp:stash:get},但还是没有成功。{exp:stash:set name="cf_homepage_main_intro"}{cf_homepage_main_intro}{/exp:stash:set} 然后 {exp:stash:cf_homepage_main_intro}。 - madebyhippo
5个回答

4

啊!我在你的问题中看到,你试图从同一模板内部调用变量。因此,你遇到了解析顺序问题。你需要在 exp:stash:get_listexp:stash:get 标签中添加 process="end" 参数。并阅读我的关于模板局部使用Stash的文章


3

嗯,我认为你可能弄错了语法。请尝试:

{exp:stash:get_list name="homepage"}
  Telephone: {mx_tel}
{/exp:stash:get_list}

此外,如果你只需要获取一个项目,我建议跳过使用set_list而是直接使用set来设置单独的变量。这两种方法都能工作,但我认为直接使用set更加直观易懂。

我正在遵循 https://github.com/croxton/Stash/tree/dev 上的说明,展示如何按照上述步骤进行。 - madebyhippo
1
以上答案在语法上是正确的,即使在开发中也是如此。快捷语法对于列表不起作用。继续使用set_list并不是一个坏主意;它可以让你保持DRYer。 - adrienne

3

当使用set_list、append_list和prepend_list时,您需要使用Stash的get_list标签对。

您正在使用的是Stash的快捷方式,与stash:get相同,但根据文档,与stash:get_list不同。

请使用get_list:

https://github.com/croxton/Stash/tree/dev#expstashget_list-tag-pair

无法获取快捷方式:

https://github.com/croxton/Stash/tree/dev#shortcut-tags(用于设置/获取)

另外,您正在使用的快捷方式实际上是利用context

{exp:stash:your_context:your_var_name}

请注意上面标签中的 "your_context"。

所以,我现在已经将头部的逻辑更改为以下格式:{exp:stash:set name="cf_homepage_main_intro"}{cf_homepage_main_intro}{/exp:stash:set}然后使用 {exp:stash:cf_homepage_main_intro},但仍然无法正常工作。 - madebyhippo
我认为你应该仍然使用set_list,并将你的get改为get_list;正如aelvan在下面提到的那样。 - Natetronn

3
问题在于我试图在同一模板内调用{get},因此需要在标签后面添加process='end'。 另外,仅供参考 - 我正在使用以下内容:
{exp:stash:set name="cf_homepage_main_intro"}{cf_homepage_main_intro}{/exp:stash:set}

然后再使用快捷标签将其取出:

{exp:stash:cf_homepage_main_intro process='end'}

工作完成!

2

{exp:stash:set_list name="homepage"} {exp:channel:entries channel="homepage" limit="1" dynamic="no"}

在这个代码中,stash是否位于循环内部非常重要。因为它涉及到解析顺序的问题,stash需要先于其他内容进行解析。


无论哪种方式都没有任何区别 :( - madebyhippo
这应该是对问题的评论,而不是一个独立的"答案"。 - adrienne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接