全局变量不解析为参数

时间:2012-11-13 20:17:31

标签: expressionengine

我遇到的问题是全局变量在作为参数传递时没有解析。

{exp:channel:entries    
    disable="categories|category_fields|member_data|pagination|trackbacks"
    dynamic="no"
    entry_id="{structure:child_ids_for:21}"
}

(0.012500 / 3.36MB)标签:{exp:channel:entries disable =“categories | category_fields | member_data | pagination | trackbacks”dynamic =“no”entry_id =“{structure:child_ids_for:21}”}

使用和不使用parse =“inside”

生成相同的结果

然而,这样可以正常工作并抓取我需要的数据

{exp:channel:entries    
    disable="categories|category_fields|member_data|pagination|trackbacks"
    dynamic="no"
    entry_id="{exp:query sql='SELECT exp_structure.entry_id, 
            exp_structure.parent_id, 
            exp_structure.lft
            FROM exp_structure
            WHERE parent_id = 21
            ORDER BY exp_structure.lft ASC'}{entry_id}|{/exp:query}"
    parse="inward"
}

但是,如果我添加一个全局变量author_id =“{logged_in_member_id}”它就无法工作,如果我将该值硬编码为1则会起作用。

有关这里可能发生的事情的任何想法?

2 个答案:

答案 0 :(得分:1)

使用Stash进行此类操作可以避免嵌入的开销。它具有非常有用的功能,可以让您明确说明不同代码块的首选解析顺序。在这种情况下,您要做的第一件事是通过{exp:stash:set}存储两个变量,然后您可以通过{exp:stash:get}在第二个代码块中检索它们。神奇的位是解析优先级标记;因为第一项的优先级为10,所以它将首先执行,这可确保vars可用作第二个{exp:stash:parse}标记中的通道条目参数。

{exp:stash:parse priority="10" process="end"}
    {exp:stash:set}
        {stash:structure_ids}{structure:sibling_ids}{/stash:structure_ids}
        {stash:logged_in_member}{logged_in_member_id}{/stash:logged_in_member}
    {/exp:stash:set}
{/exp:stash:parse}

{exp:stash:parse priority="20" process="end"}
    {exp:channel:entries
        disable="categories|category_fields|member_data|pagination|trackbacks"
        dynamic="no"
        entry_id="{exp:stash:get name='structure_ids'}"
        author_id="{exp:stash:get name='logged_in_member'}"
        parse="inward"
    }
    ...
    {/exp:channel:entries}
{/exp:stash:parse}

答案 1 :(得分:0)

我不能代表Structure的全局变量,但{logged_in_member_id}后期解析的全局变量,这意味着您不能在模块标记参数中使用它。我只能假设结构变量也是如此。

可以使用CURRENT_USER参数中的author_id常量(docs)。

不幸的是,{structure:child_ids_for:21}问题的解决方案是将其作为embed variable传递,并将您的频道条目循环放入嵌入中。 (不幸的是,因为嵌入确实会产生一些开销。)

一个注意事项:parse="inward"对模块标记对没有影响 - 它们总是向内解析。它只影响插件标签对。