Для вывода списков в шаблонах используется группа тегов ListTags.
<table border="1"> <tr> <th>№</th> <th>Название</th> <th>Объем, л</th> <th>Вес, кг</th> </tr> <list:list id="table"> <list:item> <tr> <td>{$:ListRowNumber}</td> <td>{$name}</td> <td>{$volume}</td> <td>{$weight}</td> </tr> </list:item> <list:default> <tr><td colspan='4'>Список пуст!</td></tr> </list:default> </list:list> </table>
В результате мы можем получить несколько результатов. Например, такой:
№ | Название | Объем, л | Вес, кг |
---|---|---|---|
1 | Цистерна АБ-102 | 2400 | 340 |
2 | Цистерна АБ-103 | 2000 | 300 |
Или такой:
№ | Название | Объем, л | Вес, кг |
---|---|---|---|
Список пуст! |
Для вывода данных в несколько столбцов можно применять тег <list:separator>, который выводит определенный кусок кода раз в несколько элементов списка.
Например:
<list:list id="images"> <table> <tr> <list:item> <td> <img src='{$path}' border='0' /><br />{$title} </td> <list:SEPARATOR step="3"></tr><tr></list:SEPARATOR> </list:item> </tr> </table> </list:list>
Позволит вывести изображения в 3 колонки.
Если вы заметили, то выбранный нами способ для списков, например, с 10 элементами сгенерирует невалидную верстку, поэтому примеры необходимо немного доработать:
<list:list id="images"> <table> <tr> <list:item> <td> <img src='{$path}' border='0' /><br />{$title} </td> <list:SEPARATOR step="3"></tr><tr></list:SEPARATOR> </list:item> <list:fill upto='3' var='items_left'> <td colspan='{$items_left}'> </td> </list:fill> </tr> </table> </list:list>
Здесь мы использовали тег <list:fill> (доступен с версии WACT 0.3), который выполняет код шаблона, только если список не содержал количество элементов, кратное числу upto. При этом тег <list:fill> заполняет переменную с именем var и ставит ее в текущий контейнер данных (будьте аккуратны с именем переменной, так как вы можете случайно затереть что-то в текущейм контейнере данных, а <list:list> не является обычным контейнером данных).
В нашем случае мы просто предпочли вывести заглушку в виде <td colspan='2'>. Мы могли бы также воспользоваться тегом <core:repeat> для генерации недостающих ячеек:
<list:list id="images"> <table> <tr> <list:item> <td> <img src='{$path}' border='0' /><br />{$title} </td> <list:SEPARATOR step="3"></tr><tr></list:SEPARATOR> </list:item> <list:fill upto='3' var='items_left'> <core:repeat time='{$items_left}'> <td> <img src='/images/no_image.gif' alt='sorry, no image' /> </td> </core:repeat> </list:fill> </tr> </table> </list:list>
Обсуждение