Expressionengine - 将循环变量传递给嵌入式模板

时间:2012-09-24 17:16:23

标签: expressionengine

表达引擎变量传入模板时遇到一些麻烦。

有一些代码:

//查询:

{exp:channel:entries
  channel="static"
}

//在循环中重复字段

{content_matrix}
   <div>
      {text_cell}
   </div>    
   {image}
{/content_matrix}

//

{/exp:channel:entries}

我想将content_matrix字段与大内部HTML(示例较短)sctructure一起移动到单独的嵌入模板中,以便在其他模板中重复使用。

尝试构建这样的嵌入但它不起作用:

{embed="incl/content_matrix" matrix="{content_matrix}"}

小模板的主体:

 {embed:matrix}
   <div>
      {text_cell}
   </div>    
   {image}
 {/embed:matrix}

通过这种方式,如果您传递单个元素(如ID),但不能传递mupltiple元素,则它可以正常工作。 也许它需要通过整个条目。

怎么做?

感谢。

2 个答案:

答案 0 :(得分:8)

您是否考虑过使用Stash add-on

我想你可以用某种分隔符隐藏在html的不同部分之间划分的矩阵内容,然后在嵌入式模板中为分隔符包装a search/replace,并在抓取的存储区周围使用正确的html。

但是,编写一个快速的自定义插件可能不那么痛苦。

答案 1 :(得分:3)

Embed variables传递已解析的输出,而不是标记。所以在你的例子中:

{embed="incl/content_matrix" matrix="{content_matrix}"}

您在matrix参数中实际传递的内容是该特定条目中数据的完整HTML表格输出(因为Matrix字段在用作单个标记时会输出一个表格)。

我认为您实际想要用来防止重复自己的是Snippet。所以只需制作一个包含以下内容的片段:

{content_matrix}
   <div>
      {text_cell}
   </div>    
   {image}
{/content_matrix}

并将其保存为 matrix_loop 。然后将其包含在Channel Entries循环中,如下所示:

{matrix_loop}