我确信这个问题不值得它自己的主题,但我在论坛和Stack Overflow上找不到令人满意的答案。
我有三个模板。我会尽量清楚简单地说明我要做的事情。
网页
{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 :(得分: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}
很难确切知道哪种方法最适合您的需求,但我希望您在避免多个频道条目调用和嵌套嵌入以支持关系和片段方面会好得多。你应该能够避免相当多的开销。
答案 1 :(得分: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());
...不会返回预期值。似乎没有办法嵌入一个自己从不同站点获取数据的模板。这是令人失望的,因为从其他人那里获取数据,而不重复频道/模板对我来说,是你想要使用多站点管理器的确切原因......