2012-10-31 41 views
1

我喜歡爲我構建的頁面填充thumbnailog:image元標記(供Facebook,Google和其他服務使用),並試圖精簡我的方法。根據嵌入條件填充preload_replace變量

我希望在顯示沒有特定圖像資源的頁面時指定通用的站點範圍的圖像,同時可以在保證(通過embed變量傳遞)時指定特定圖像。

這裏是我的方法:

{embed="_global/_header" thumbnail="http://mysite.com/images/articles/some-image.jpg"} 

然後在_header

{if embed:thumbnail}{preload_replace:thumbnail="{embed:thumbnail}"}{/if} 
{preload_replace:thumbnail="{site_url}/assets/img/thumbnail.jpg"} 

... 

<meta name="og:image" content="{thumbnail}" /> 
<meta name="thumbnail" content="{thumbnail}" /> 

這當我通過embed通過縮略圖URL(作爲一個preload_replace設置的第一個值的偉大工程變量是用來和隨後的那些被忽略),但是當我做傳遞值,{thumbnail}結束空的(而不是使用我分配{site_url}/assets/img/thumbnail.jpg價值)。

任何人都可以在這裏看到我的方法錯誤?爲什麼{thumbnail}在我沒有通過該嵌入變量的情況下會在我的條件內解析(結束爲空)?

回答

3

下面的工程,當我在EE2.5中嘗試它。3:

{if embed:thumbnail == ''}{preload_replace:thumb="/assets/img/thumbnail.jpg"}{/if} 
{if embed:thumbnail != ''}{preload_replace:thumb="{embed:thumbnail}"}{/if} 

如果我逆轉順序,它不起作用,我得到你報告的行爲 - 罰款,如果有一個嵌入參數,否則爲空。至於爲什麼這個順序的工作,我不知道 - 也許解析順序像很多EE怪癖相關。希望別人可以解釋爲什麼它的作品,我們都可以學習:)

+0

該語法做​​了竅門,謝謝。 –

2

你可能想嘗試寫你的條件就是這樣,爲了避免怪異的EE解析順序問題:

{if "{embed:thumbnail}" == ""} 
    {preload_replace:thumbnail="{embed:thumbnail}"} 
{/if} 

而且,我不是太熟悉preload_replace,但你可以解決這個使用Stash?它具有額外的優勢,您可以在頁面模板中進一步設置縮略圖(例如,從您的頻道內容中動態設置縮略圖)。

在你的頁面模板:

{embed="_global/_header"} 
{exp:stash:set name="thumbnail"}http://mysite.com/images/articles/some-image.jpg{/exp:stash:set} 

在你的頭嵌入:

{!-- set the default thumbnail --} 
{exp:stash:set name="thumbnail" replace="no"}http://mysite.com/images/default.jpg{/exp:stash:set} 
<meta name="og:image" content='{exp:stash:get name="thumbnail"}' /> 
<meta name="thumbnail" content='{exp:stash:get name="thumbnail"}' /> 
+0

啊是的,另一個涉及隱藏的答案!讓我感到驚訝,哈哈。謝謝你,雖然這*應該*本身工作,我想要本地解決它。引用的嵌入變量條件不幸的是沒有區別。 –

+0

哈,當然。它現在在大多數安裝中都是非常標準的,所以不會增加任何額外的開銷:) –

0

我已經採取了同樣的做法阿德里安與元數據表明,它會爲你的縮略圖工作太 - 認爲這通常是對你的模板進行思考的一種非常不同的方式。我在之前的Stack Exchange中描述了這個方法,它回答了一個關於用條目數據without needing multiple entries loops here填充頁面標籤的問題。

當我使用元數據藏匿,我將切實做到你想與您的縮略圖,做同樣的事情 - 有後備條件爲默認值,當特定條目數據沒有輸入/可用。我在入門級運行該條件,然後隱藏:設置結果。然後在元標題 - 這是我的嵌入式佈局包裝模板的一部分 - 我使用隱藏:獲取隱藏的結果。同樣的事情可以只是你要設置在解析順序一個點,在分析順序後得到任何數據來完成 - 無論它出現在包裝的模板,因爲作爲一個嵌入(和通常只有一個,你會在存儲設置中使用)它的分析比你的條目循環邏輯晚。