Вывод по тегу ditto:
Буду по возможности краток :) В CMS MODx есть модуль Ditto, который позволяет выводить списки. С помощью него выводятся новости, документы раздела, и прочие однотипные сущности. Пример:
<div>
<span>Иванов Иван</span>
<span>Петров Петр</span>
<span>Сидоров Сидр</span>
...
</div>
Всё здорово, однако что делать если надо прерывать вывод списка? Вот как-то так:
<div>
<span>Иванов Иван</span>
<span>Петров Петр</span>
</div>
<div>
<span>Сидоров Сидр</span>
...
</div>
Ага, одни тут же вспомнили про [+ditto_iteration+], а другие, покопавшись в MODx Wiki, нашли [+phx:evenodd+]. Всё верно: копирем тот сниппет, немного редактируем, ставим в конце чанка-шаблона [+ditto_iteration:evenodd+], и получаем требуемый результат.
А что делать если надо не через два? Ведь чет и нечет пролетают мимо. Правильно — можно взять всё тот же сниппет и переписать его "через каждые 3", ничего сложного.
И всё это здорово, но есть пара НО:
1) Каждый раз прерывать поток сознания на переписывание таких глупостей весьма глупо.
2) Если в проекте надо и через 2, и через 3, и через 7, да еще и прерыватели везде разные, то хочется это как-то автоматизировать.
Собственно, после пары подобных ситуаций я немного переписал тот самый phx:evenodd, в результате чего предлагаю вам ознакомиться с phx:evenoddx. Разница, если кто не понял, в последней букве.
Сам сниппет:
<?php
$x = explode('::', $options);
$num = is_numeric($x[0]) ? $x[0] : 3;
$html = isset($x[1]) ? $x[1] : '<div></div>';
if (!($output % $num) && ($output))
return $html;
else
return ' ';
?>
Ну, если кто не в курсе, то надо создать сниппет, назвать его phx:evenoddx, и записать в него вышеприведенный код. И, разумеется, иметь установленный phx. После этого в конце чанка, который будет использовать Ditto, вызываем наш сниппет вот так:
[+ditto_iteration:evenoddx+]
Если параметров нет (как в этом примере), то на каждый 3-ий вывод будет генерироваться '</div><div>'. Таким нехитрым образом решается последняя задача из вышеприведенных (она весьма часта). Но можно написать и так:
[+ditto_iteration:evenoddx=`5`+]
— '</div><div>' будет выводиться через каждые 5 элементов.
[+ditto_iteration:evenoddx=`17::</span><span class="pictures">`+]
— Через каждые 17 будет выводиться '</span><span class="pictures">'. Двойное двоеточие — это просто такой разделитель.
Таким образом задача прерываемого перечисления элементов с помощью Ditto решается однажды и навсегда, можно через сколько угодно элементов вставлять любой прерыватель. Пользуйтесь на здоровье, если кому понадобится. С удовольствием узнаю ваши варианты решения подобной проблемы.
