2012-11-12 200 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表選擇插件字段,所以關係不存在問題。我已更新我的問題! –