У меня есть этот код на php, я преобразовал его в веточку, но не получил того же результата.
<?php for($j=0;$j<sizeof($products[$category]);) { ?>
<div class = "wrapper">
<?php for($f=0;$f<$rows;$f++,$j++) {
if ($j<sizeof($products[$category])) { ?>
<?php if ($products[$category][$j]) { ?>
<?php }
if (sizeof($products[$category])<(4*$rows)-1){
if (((sizeof($products[$category])-($j)) + 1)%3 == 0){
$cnt = 1;
}
if ($cnt == 1){
$f++;
}
}
?>
<?php } ?>
<?php } ?>
</div>
в файле ветки:
{% for j in 0..(products[category]|length)-1 %}
<div class = "wrapper">
{% for f in 0..rows-1 %}
{% if j < products[category]|length %}
{% if products[category][j] %}
{% endif %}
{% if products[category]|length < ((4*rows)-1) %}
{% if (((products[category]|length)-(j)) + 1)%rows == 0 %}
{% set cnt = 1 %}
{% endif %}
{% if cnt == 1 %}
{% set f = f + 1 %}
{% endif %}
{% endif %}
{% endif %}
{% set j = j + 1 %}
{% endfor %}
</div>
Как я могу реализовать $j++ с итерацией цикла f?
Пожалуйста помоги.
Заранее спасибо.
@MantisSupport, спасибо, но я вас не понял. Не могли бы вы написать в соответствии с моими переменными кода?
Не можете просто выполнить {% set j = j + 1%} во втором цикле? @mantis Я очень надеюсь, что вы не можете изменить переменную цикла
Я сделал это, но моя проблема в том, что когда f = rows-1, f for loop будет отброшен, а управление перейдет к j for loop, тем временем, когда управление перейдет к j for loop, я хочу увеличить j ++, чего нельзя достичь, написав {% set j = j + 1%} в цикле f for, поскольку он не будет выполняться.






Попробуйте, это сработает для вас
<div class = "wrapper">
{% set j = 0 %}
{% for f in 0..rows-1 %}
{% if j < products[category]|length %}
{% if products[category][j] %}
{% endif %}
{% if products[category]|length < ((4*rows)-1) %}
{% if (((products[category]|length)-(j)) + 1)%rows == 0 %}
{% set cnt = 1 %}
{% endif %}
{% if cnt == 1 %}
{% set f = f + 1 %}
{% endif %}
{% endif %}
{% endif %}
{% if f < rows %}
{% set j = j + 1 %}
{% endif %}
{% endfor %}
</div>
@Prashant, я пробовал это, но с моим PHP-кодом я получил результат как 1 3 5 2 4, но с веточкой я получил результат как 1 2 3 4 5 2 3 4 5, поэтому в цикле f for он увеличивает j при переходе к родительскому цикл при проверке условий f для цикла, как в php
if (((sizeof ($ products [$ category]) - ($ j)) + 1)% 3 == 0) {это отличается от кода ветки и php, вот в чем проблема?
Нет, проблема не в этом. Я просто использовал переменную вместо 4 в веточке
Позвольте нам продолжить обсуждение в чате.
Написание кода ниже, основанного на желаемом выходе.
Нравится - Всего строк 2, элементов 6, затем
1 3 5
2 4 6
Строки по 3 и элементы по 8, тогда
1 4 7
2 5 8
3 6
Предполагая, что twig follow - массив индексов с нулевым отсчетом
{% set TOTALITEMS = (products[category]|length) %}
{% set TOTALROWS = 2 %}
{% set ITEMSPERROW = TOTALITEMS / TOTALROWS %} <!-- make sure you get integer number only, if not then make it by helper functions of php / twig -->
{% for rowIndex in 0 .. TOTALROWS - 1 %}
<!-- start a div which will contain a row -->
{% for columnIndex in 0 .. ITEMSPERROW - 1 %}
<!-- here you have a item ready to dump in html -->
{% products[category][ (columnIndex * TOTALROWS) + rowIndex ] %}
{% endfor %} <!-- end of loop for columnIndex ...-->
<!-- end a div which contained a row -->
{% endfor %} <!-- end of loop for rowIndex ...-->
вы можете сделать {% set loop.parent.loop.index = loop.parent.loop.index + 1%} в ветке?