Цикл для создания таблицы в Smarty

  • Автор темы --Alexandr--
  • Дата начала

--Alexandr--

Guest
Цикл для создания таблицы в Smarty

Необходимо вывеси несколько элементов 2мерного массива поочередно в двух колонках таблицы.
<table>
{section name=i loop=$prod step=2}
<tr>
<td>
<br>
{$prod[2]}<br>
{$prod[6]}
</td>
<td>
<td>
<br>
{$prod[i+1][2]}<br>
{$prod[i+1][6]}
</td>
<td>
</tr>
{/section}
</table>
Пробема в том, что во второй колонке должен отабражаться
следующий элемент массива типа {$prod[i+1][2]}, что является
ошибкой. Вручную индекс цикла менять тоже нельзя. Как реализовать?
 

Demiurg

Guest
для начала стоит разобраться с html. что такое
</td>
<td>
<td>
?
 

--Alexandr--

Guest
Да тег лишний, лишнее вырезал для примера - ошибся.
В две колонки вывод работает. Вся проблема в индексе цикла
который нельзя установить на нужный. И {$prod[i+1][2]} не работает.
<table>
{section name=i loop=$prod step=1}
<tr>
<td>
{$prod[2]}
{$prod[6]}
</td>
<td>
{$prod[i+1][2]}
{$prod[i+1][6]}
</td>
</tr>
{/section}
</table>
 

Demiurg

Guest
--Alexandr--
постарайся в этом форуме приводить реальные примеры с помощью copy/paste.

Что касается твоего вопроса, то ты выбрал не верный алгоритм. Надо выводить в цикле все td, а по четным td выводить еще и </tr><tr>. И не стоит использовть section в твоем случае. Посмотри в сторону foreach.
 

BestGS

Guest
Если я все правильно понял, то это делается вот так:
php.php
PHP:
$array[] = array(1,2,3,4,5);
$array[] = array(10,20,30,40,50);
$array[] = array(100,200,300,400,500);
$smarty->assign('array',$array);
smarty.smarty
<table width="500" border="1" cellspacing="0" cellpadding="5">
{section name=array loop=$array}
<tr>
<td>{$array[array][array]}</td>
<td>{section name=subarray loop=$array[array]}
{$array[array][subarray]}<br>
{/section}</td>
</tr>
{/section}
</table>


Лучше читать документацию надо:)
Пример 7-18. вложенные секции
 

--Alexandr--

Guest
BestGS обходить строку в цикле не надо. Мой массив:
(Id, Name, Price, и т.д.)
('1','Товар1','5')
('2','Товар2','50')
('3','Товар3','500')
('4','Товар4','500')
В ячейку вывожу
{$prod[1]} - Название
{$prod[2]} - Цена
Нужна таблица
_____________
|Товар1|Товар2|
|Цена 1|Цена 2|
---------------------
|Товар3|Товар4|
|Цена 3|Цена 4|
---------------------
 

gz0t

Новичок
<table border="0" cellspacing="5" cellpadding="5" class="maintable">
{foreach from=$document item=object name=objfor}
<tr>
<td valign=top>
{$object.name}
</td>
<td valign=top>
{$object.proce}
</td>
</tr>
{/foreach}
</table>
 

--Alexandr--

Guest
gz0t Получаем в первой колонке название, во второй цену - не то. Для простоты можно без цены.
1кол - 1 строка = товар1;
2кол - 1 строка = товар2;
1кол - 2 строка = товар3;
2кол - 2 строка = товар4;
 

Demiurg

Guest
--Alexandr--
Я же тебе давно уже описал алгоритм. Какие проблемы с его реализацией ?
 

nw

Новичок
Может что-то вроде:
for ($i=0;$row = mysql_fetch_array($result);$i++) {
$goods[$i]["name"] = $row["good_name"];
$goods[$i]["id"] = $row["good_id"];
$goods[$i]["price"] = $row["good_price"];
}
$smarty->assign("GOODS",$goods);
$smarty->assign("cols",2);

А в шаблоне:
<TABLE width=100%>
<TR>
{section name=numloop loop=$GOODS}
<TD align=left>
{$GOODS[numloop].name}<br> {$GOODS[numloop].price}</TD>
{if not ($smarty.section.numloop.rownum mod $cols)}
{if not $smarty.section.numloop.last}
</TR><TR>
{/if}
{/if}
{if $smarty.section.numloop.last}
{math equation = "n - a % n" n=$cols a=$GOODS|@count assign="cells"}
{if $cells ne $cols}
{section name=pad loop=$cells}
<TD>&nbsp;</TD>
{/section}
{/if}
</TR>
{/if}
{/section}
</TABLE>

Это ггде-то проскакивало.
 

Мутник

Новичок
PHP:
{if ($smarty.section.name.rownum % 2) eq 0}</tr><tr>{/if}
Это ты проставляешь по четным эелементам в цикле. И будет у тебя показываться нормально по две ячейки.

P.S. и не забыть в конце в ЛЮБОМ случае закрыть </tr>
 

Рафаэль

Guest
Автор оригинала: --Alexandr--
gz0t Получаем в первой колонке название, во второй цену - не то. Для простоты можно без цены.
1кол - 1 строка = товар1;
2кол - 1 строка = товар2;
1кол - 2 строка = товар3;
2кол - 2 строка = товар4;
<table>
{foreach from=products item="prod" name="cicle"}
{if $smarty.foreach.cicle.iteration is even by 2}
<tr>
{/if}
<td>
{prod.1}
</td>
{if $smarty.foreach.cicle.iteration is even by 2}
</tr>
{/if}

{/foreach}
</table>

где products - тот самый двумерный массив
 
Сверху