2016-12-30 227 views
0

我有一種感覺,這將是一個非常簡單的解決方案,但我現在無法圍繞它解決它。我正在用Twig構建Craft CMS模板,並希望以特定模式佈置一些元素(圖庫圖像塊)。類似於這個例子。 example photo樹枝模板條件模式循環

當我遍歷每一個元素時,我都希望適當地顯示它們,無論大小。 sm,sm,lg,lg,sm,sm,sm,sm,lg,lg等等。

我知道我可以明顯地大跳循環這樣

{% if loop.index is even %} 
... 
{% endif %} 

或像這樣一個爲[SM,SM,LG,SM,SM LG]

{% if loop.index is divisible by(3) %} 
... 
{% endif %} 

,但我的結果模式稍微複雜一些。

謝謝,尋求幫助。

+2

我不確定你想在這裏捕捉什麼樣的圖案。 – JETM

+0

是的,請明確說明您可能需要什麼! –

+0

我基本上想要在前兩次觸發「真」,然後「假」兩次,然後「真」四次,如此類推(如上圖)。 –

回答

0

你想要的圖案是sm sm lg打印正常,然後逆轉,然後正常...

sm sm lg lg sm sm sm sm lg ...

您可以創建一個macro(一function in Twig)輸出這種模式:

{% macro printPattern(reverse = false) %} {# the function AKA macro signature #} 
    {% set sm = 'a small image' %} {# Make this an <img> tag. #} 
    {% set lg = 'a large image' %} 
    {% set pattern = (reverse) ? [lg, sm, sm] : [sm, sm, lg] %} 

    {% for n in pattern %}{{ n }} {% endfor %} 
{% endmacro %} 

{# If you wanted to use the macro in the same file you must include: #} 
{% import from _self as helper %} 

{# Then call the macro: #} 
{{ helper.printPattern(false) }} 
{{ helper.printPattern(true) }} 
{{ helper.printPattern() }} {# This does the same as helper.printPattern(false) #} 
{# because we set a default value for the passed-in variable in the macro's signature. #} 

Example


特別說明:

我使用的操作者ternary?在這條線:

{% set pattern = (reverse) ? [lg, sm, sm] : [sm, sm, lg] %}

(回想reverseboolean值,即truefalse)。

該行等同於:

{% if reverse %} 
    {% set pattern = [sm, sm, lg] %} 
{% else %} 
    {% set pattern = [lg, sm, sm] %} 
{% endif %} 

Ternary operator是對於一些有條件的數據賦值給一個變量非常方便。

+0

好的,我一直在玩你的代碼,我想我在正確的頁面上,但是當涉及到在模式中實現變量時,我有點失落。這是我的。 https://twigfiddle.com/xld36e 在什麼時候我會查看一組三個變量來實現模式? –

+0

@TimCook,該鏈接指向我的示例。你有保存嗎? – Rhono

+0

我以爲我更新了,嘗試twigfiddle。com/xld36e/2 –