2012-11-12 201 views
0

我确定这个问题不值得它自己的话题,但我没有找到一个满意的答案在论坛和堆栈溢出。嵌套模板的嵌套条目

我有三个模板。我会尽力让自己想要做的事情变得清晰简单。

{exp:channel:entries channel="page" dynamic="yes"} 
    {!-- 'pages_module' is a matrix field --} 
    {page_modules} 
     {!-- The field 'module' is returning the entry_id from SP Table Select --} 
     {embed="module/index" id="{module:value}"} 
    {/page_modules} 
{/exp:channel:entries} 

模块 - 指数

{exp:channel:entries channel="module" dynamic="no" entry_id="{embed:id}" site="main_site"} 
    {if module_type == "building"} 
     {embed="module/building" id="{building_id}"} 
    {/if} 
    {!-- Other module type checking here... --} 
    {!-- Note this following line --} 
{entry_id} - {embed:id} 
{/exp:channel:entries} 

模块 - 因此,基本上建立

{exp:channel:entries channel="building" dynamic="no" entry_id="{embed:id}" site="main_site"} 
    <h1>{title}</h1> 
    <p>{building_description}</p> 
{/exp:channel:entries} 

,在这个设置可以将“模块”附加到页面条目中。在这种特殊情况下,我试图查看是否在页面上设置了{module_id}。如果是这样,将{module_id}传递给主模块模板,该模板将获取模块条目,比较{module_type}并将{building_id}发送到第三个模板。然后获取并显示建筑物信息。

在模块模板中,我写了一个注释,{entry_id}和{embed:id}不匹配。 {entry_id}等于动态获取的第一个页面条目的ID。我认为这是因为它嵌入了模板而不是片段,因此会产生三个嵌套的{exp:channel:entries}标签。但是再次,我无法将ID传递给一个片段,对吗?

另外值得注意的是,我使用MSM,并且由于我有8个站点在上面运行,所以我希望“模块”是模块化的,并且都位于“主站点”以方便维护。

我希望有人能澄清这个和/或纠正我,如果我错了。

回答

0

,如文档中引用:

从其他网站嵌入模板

要从其他网站嵌入一个模板,只需前缀的短名称指定的模板 组和模板您希望 从您的网站拉模板如下:

{embed="site_short_name:template_group/template"}

但是!

指定多个站点(头准备行程)

注意:指定多个站点不与{embed=”“}标签工作。

然后,我以为我可以绕过这个限制与PHP玩,但似乎连基本的...

$output = $this->EE->TMPL->parse_variables('{exp:channel:entries channel="module" dynamic="no" site="main_site"}{entry_id}{/exp:channel:entries}', array()); 

...不会返回预期值。似乎没有办法嵌入一个模板,它自己从不同的站点获取数据。这是令人失望的,因为从其他渠道获取数据,而不是重复渠道/模板,对我而言,您想要使用多站点管理器的确切原因......

1

但是再次,我无法将ID传递给片段,我可以吗?

一个片段的行为就像是一个内嵌的代码块,所以它会同样意识到它的周围环境。例如,如果模块 - 指数是一个片段,你可以这样做:

{exp:channel:entries channel="page" dynamic="yes"} 
    {if module_id}{snippet_module_index}{/if} 
{/exp:channel:entries} 

片段(snippet_module_index)

{exp:channel:entries channel="module" dynamic="no" entry_id="{module_id}" site="main_site"} 
    ... 
{/exp:channel:entries} 

这不是一帆风顺不过,因为然后你有嵌套的通道条目标签,这通常是最好的避免。有没有什么特别的原因让你不使用relationship fields?显然,{module_id}对应于模块通道中的条目,为什么不在这里利用EE的内置功能呢?如果你开始使用的关系突然间你可以做这样的事情:

{exp:channel:entries channel="page" dynamic="yes"} 
    {related_entries id="related_module"} 
     {if module_type == 'building'} 
      Embed/snippet containing building 'module' 
     {/if} 
    {/related_entries} 
{/exp:channel:entries} 

这是很难确切地知道什么样的方法将最适合您的需求,但我希望你会好得多避免几个通道条目通话并嵌套嵌入有利于关系和片段。你应该能够避免相当多的开销。

+0

感谢您的回答。由于在Matrix字段内module_id实际上是一个SP表选择插件字段,所以关系不存在问题。我已更新我的问题! –