В OC существует набор тегов foreach_row, foreach_col и foreach_cell для Smarty, которые используются для генерирования таблиц. Эти теги используются в паре foreach_row + foreach_cell или foreach_col + foreach_cell.
Во всех примерах используется шаблон типа Список Гибридных Документов.
Пример 1. Вывод списка документов в таблице в 4 колонки
{foreach_row from=$docs item=doc cols=4}
{foreach_cell}
<a href="{$doc.href}">{$doc.header}</a>
{/foreach_cell}
{/foreach_row}
Пример 2. Задание аттрибутов таблицы вручную
<table border="0" cellspacing="0" id="table-docs" class="new-docs" style="font-size: 85%;">
{foreach_row from=$docs item=doc cols=4 table=no}
{foreach_cell}
<a href="{$doc.href}">{$doc.header}</a>
{/foreach_cell}
{/foreach_row}
</table>
Пример 3. Построчная зебра
{foreach_row from=$docs item=doc cols=4 tr=no}
<tr class="{cycle values="plain,gray"}">
{foreach_cell}
<a href="{$doc.href}">{$doc.header}</a>
{/foreach_cell}
</tr>
{/foreach_row}
Пример 4. Заполнение пустых ячеек
По умолчанию в последней строке (foreach_row) или столбце (foreach_col) добавляются пустые ячейки (<td> </td>) вместо недостающих документов. Для ручного вывода недостающих ячеек используется параметр expand тега foreach_row/foreach_col. Если задать expand=yes, то foreach_cell будет вызываться с null элементом в недостающих ячейках.
{foreach_row from=$docs item=doc cols=4 expand=yes}
{foreach_cell}
{if $doc}
<a href="{$doc.href}">{$doc.header}</a>
{else}{* пустая ячейка *}
N/A
{/if}
{/foreach_cell}
{/foreach_row}
Пример 5. Управление всеми тегами таблицы вручную
<table border="0" cellspacing="0" id="table-docs" class="new-docs" style="font-size: 85%;">
{foreach_row from=$docs item=doc cols=3 table=off tr=off}
<tr class="r-{cycle values="1,2,3"}">
{foreach_cell td=off}
<td id="doc-{$doc._id}">
<a href="{$doc.href}">{$doc.header}</a>
</td>
{/foreach_cell}
</tr>
{/foreach_row}
</table>
Пример 6. Доступ к состоянию цикла
{foreach_row from=$docs item=doc cols=4 status=st}
{foreach_cell}
<code>
row: {$st.col}, col: {$st.row}<br>
iteration: {$st.iteration}, index: {$st.index}
</code>
<a href="{$doc.href}">{$doc.header}</a>
<code>Full status: {$st|@debug_print_var}</code>
{/foreach_cell}
{/foreach_row}
Здесь мы через параметр status указали имя переменной, в которой будет доступно состояние цикла (st).
Во всех примерах был показан foreach_row. Если его заменить на foreach_col, то документы будут выводиться в таблице не слева направо, а сверху вниз.

Комментарии