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