我遇到的问题是全局变量在作为参数传递时没有解析。
{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则会起作用。
有关这里可能发生的事情的任何想法?
答案 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"
对模块标记对没有影响 - 它们总是向内解析。它只影响插件标签对。