2014-05-15 117 views
1

我有枝杈模板循環:For循環 - 從1迭代至x

{% for item in 1..0 %} 
    {{ item }} 
{% endfor %} 

(當然在實際生活中,而不是0的有可變值)。我想在這個例子中預計,循環將不執行,因爲0比1低,但事實上它顯示

1 0 

問題:在枝杈循環使用簡單,有沒有辦法在這個例子中(或其他循環)告訴枝杈我想重複++不 - 或者我要補充條件循環前檢查,如果0低於1

編輯

我當然知道我可以在PHP中創建數組並在Twig模板中使用它但這個案子的東西 - 沒有PHP

EDIT2創建數組:我想

它產生星級簡單的使用。現在我需要的代碼,因爲我不得不如果檢查每個for循環添加額外的:

{% if full_stars_number >= 1 %} 
    {% for item in 1..full_stars_number %} 
     <img src="img/full_star.png" /> 
    {% endfor %} 
{% endif %} 
{% if half_stars_number >= 1 %} 
    {% for item in 1..half_stars_number %} 
     <img src="img/half_star.png" /> 
    {% endfor %} 
{% endif %} 
{% if empty_stars_number >= 1 %} 
    {% for item in 1..empty_stars_number %} 
     <img src="img/empty_star.png" /> 
    {% endfor %} 
{% endif %} 
+1

看到這個http://twig.sensiolabs.org/doc/tags/for.html#adding-a-condition –

+0

我問這個問題之前我讀過它,但我認爲它不能解決問題 –

+1

@MarcinNabiałek我認爲因爲樹枝不是一種編程語言,只是模板,唯一的選擇是@Blacksad的答案;我從小枝的循環中得到的理解是'foreach'不簡單'for';即使你想設置一個特定的步驟,你需要定義'範圍'步驟,然後把'for' – Javad

回答

1

試試這個:

{% for item in 1..full_stars_number if full_stars_number>0 %} 
    <img src="img/full_star.png" /> 
{% endfor %} 

{% for item in 1..half_stars_number if half_stars_number>0 %} 
    <img src="img/half_star.png" /> 
{% endfor %} 

{% for item in 1..empty_stars_number if empty_stars_number>0 %} 
    <img src="img/empty_star.png" /> 
{% endfor %} 

這基本上是一樣的你已經在你的EDIT2一樣,但在一個稍微更簡潔的方式。

+0

我認爲這將是最好的選擇 –

+0

只是想到這實際上遍歷所有元素。因此,如果'full_stars_number'爲零,則它將遍歷1和0. if條件針對每個項目運行。 –

+0

不!如果條件爲假(即'full_stars_number <= 0'),'for'內的代碼不會被執行,否則使用這種可能性來添加一個條件? – Blacksad

1

1..x產生的集合,具有包容性的價值。它可以按照升序或降序排列。這是預料之中的。

我不確定你想要達到什麼效果,但是你描述它的方式在樹枝裏是不可能的。

你可以寫你自己的twig function,這將產生的值,或返回一個空數組:

{% set itemsCount = 0 %} 
{% for item in my_crazy_function(itemsCount) %} 
    {{ item }} 
{% endfor %} 

編輯:

如果你只是想重複的次數值號碼,你可以寫樹枝過濾器:

{{ '<img src="img/empty_star.png" />' | repeat(5) }} 

功能的實現可能只是PHP的str_repeat呼叫:

class Project_Twig_Extension extends Twig_Extension 
{ 
    public function getFilters() 
    { 
     return array(
      new Twig_SimpleFilter('repeat', 'str_repeat'), 
     ); 
    } 

    // ... 
} 
+0

是的,我知道我可以簡單地做到這一點,但1..x語法怎麼樣。 –

+0

對不起,我誤解了你。更新了答案。 –

+0

我發佈了問題代碼,顯示我想要達到的目標 –