表达式引擎动态变量名称:{slide_ {index} _title}

时间:2013-05-20 16:48:45

标签: expressionengine

我使用的是一个简单的循环插件,因此我的模板看起来像这样:

{exp:loop_plus start="1" end="4" increment="1"}
<h3>{slide_{index}_title}</h3>
{/exp:loop_plus}

但是,我最终得到以下输出:

<h3>{slide_1_title}</h3>
<h3>{slide_2_title}</h3>
<h3>{slide_3_title}</h3>
<h3>{slide_4_title}</h3>

我有没有办法拥有这样的动态变量名?我不是在寻找构建滑块的替代方法,我只是想知道这样的动态变量名是否可行。谢谢!

2 个答案:

答案 0 :(得分:1)

我假设Loop Plus(http://devot-ee.com/add-ons/loop-plus)设置了{index}部分,所以问题是定义{slide_1_title}的内容......?

假设您有一个带有此定义的输入字段或变量,您所拥有的是正确的,但如果它不起作用,则表示存在解析顺序问题。

假设您提供的代码包含在{exp:channel:entries}标记对中,EE会尝试首先解析变量,因此会看到:{slide_{index}_title}不存在。然后{exp:loop_plus}加载项将解析它,将其转换为{slide_1_title}(但是为了通道:条目已经尝试解析它),这最终输出到模板。

所以你想要确保的是EE在{exp:loop_plus}之前解析{exp:channel:entries},使用parse="inward"标签执行此操作:

{exp:loop_plus start="1" end="4" increment="1" parse="inward"}
    <h3>{slide_{index}_title}</h3>
{/exp:loop_plus}

这是EE用来控制解析顺序的全局EE参数 - 您不会在特定的附加组件下找到它。通过添加参数,这意味着该子标记将在其父标记之前被解析。

答案 1 :(得分:0)

您可以这样做的一种方法是在模板中声明preload_replace变量,并在自定义字段名称中使用它。

类似于:

 {preload_replace:my_var_prefix="whatever"}

然后在你的循环中,你可以使用:

 {slide_{my_var_prefix}_title}