2012-11-13 86 views
1

我遇到了全局变量在作为参数传递时无法解析的麻烦。全局变量不解析为参数

{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:信道:条目禁用= “类别| category_fields | member_data |分页|引用通告” 动态= “否” entry_id = “{结构:child_ids_for:21}” }

时,会产生相同的结果与不解析=“向内”

但是这工作得很好,并抓住我需要

{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" 
} 

的数据,但是,那么如果我加入一个全球性的variabl e author_id =“{logged_in_member_id}”它无法工作,如果我将该值硬编码为1,那么它就起作用。

对这里会发生什么有什么想法?

回答

0

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

可以author_id参数虽然(docs)使用CURRENT_USER不变。

不幸的是,您的{structure:child_ids_for:21}问题的解决方案是将其作为embed variable传递给您,并将您的Channel Entries循环嵌入到其中。 (我说,不幸的是,因为嵌入视频做招致一些开销。)

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

+0

谢谢德里克,试图避免嵌入,但似乎是这里的解决方案。感谢您的意见,非常感谢。 – greendesigned

1

您可以通过使用Stash来避免嵌入的开销。它具有非常有用的功能,可以让您明确声明不同代码块的首选解析顺序。在这种情况下,您要做的第一件事是通过{exp:stash:set}来存储这两个变量,然后您可以通过{exp:stash:get}在第二块代码中检索它们。魔术比特是解析优先级标签;因为第一个项目的优先级为10,它将首先执行,这确保了变量可用作第二个{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}