我在Twig模板中循环:
{% for item in 1..0 %}
{{ item }}
{% endfor %}
(当然在现实生活中代替0,有变量值)。我希望在这个例子中循环不会被执行,因为0小于1.但实际上它显示
1 0
问题:在这个例子中是否有任何方法在Twig(或其他循环)中使用简单的for循环告诉Twig我想迭代++不 - 或者我必须添加条件来检查在循环之前,如果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 %}
答案 0 :(得分: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'),
);
}
// ...
}
答案 1 :(得分: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中所做的基本相同,但是稍微简洁一些。