[Smarty] создать 2-х мерный масив 2xX

Talmuth

Новичок
[Smarty] создать 2-х мерный масив 2xX

Как в шаблоне смарти создать сабжевый масив с последующей возможностью присвоения данных его елементам?

Сфера исспользования (к примеру):
есть несколько (зарание не известно) категорий, каждая из которых имеет два численных свойства
нобходимо получить таблицу вида:

Код:
...-+-------------------------+-...
... |        категория X      | ...
...-+------------+------------+-...
... | св-во 1    |  св-во 2   | ...
...-+------------+------------+-...
PHP:
{foreach from=$foo item="bar" name="rows"}
<tr>
        {foreach from=$category_list item="category" name="category_col"}
         <td>{$bar[$category.id].prop1}</td>
         <td>{$bar[$category.id].prop2}</td>
        {*
         * Сдесь нужно сумировать масив, где-то примерно так
         *}
        {math equation="x + y" x=$bar[$category.id].prop1 y=$sum[$category.id].prop1 assign=$sum[$category.id].prop1}
        {math equation="x + y" x=$bar[$category.id].prop2 y=$sum[$category.id].prop2 assign=$sum[$category.id].prop2}
        {/foreach}
</tr>
{/foreach}
Код:
...-+------------+------------+-...
... | SUM(св-во1)| SUM(св-во2)| ...
...-+------------+------------+-...
так вот сам вопрос, как инициировать масив $sum (и как правильно присваивать значения его элементам, этот вопрос, подозреваю, отпадет при ответе на первый)
 

kvf77

Red Devil
Talmuth

массив надо создавать в скрипте и в шаблон передавать готовый массив, а то, что ты пытаешься сделать - это идеологически не правильно - почему у тебя шаблон занимается черте чем? почему не отдавать шаблону сразу нужные данные в нужном формате?
 

DeadMorozBLR

Новичок
kvf77:
Как раз идеологически это правильно: шаблон (шаблонизатор) как компонент слоя представления получает информацию в сыром виде (одномерный массив) и отображает ее в соответствиями с логикой, заложенной в шаблоне.

Другое дело - производительность: математические расчеты, выполняемые в шаблонизаторе гораздо медленее чем аналогичные в самом PHP.

Здесь есть что-то похожее: http://smarty.incutio.com/?page=SmartyColumnsTutorial
 

alexhemp

Новичок
Talmuth

Зачем тебе в шаблоне массив создавать.

Передай в шаблон 2 массива.

1. ID_категории => категория
2. ID_категории => array(ID_свойства => Свойство)

Выводи в цикле категории. Внутри цикла выводи свойства и форматируй как надо.

Вот это будет правильно. Ты достаешь из базы данные, формируешь из них структуры данных отражающие предметную область и передаешь смарти.

Понятно желание меньше писать в скрипте - закинуть просто исходную таблицу целиком в шаблон, но это не верно.

Данные в базе хранятся в структуре отличной от модели данных приложения, вот и у тебя - иерархическая модель данных в реляционной БД храниться как список отношений.
 

kvf77

Red Devil
DeadMorozBLR

угу, рассказывай, рассказывай. шаблон - это не программа, то что там есть минимальная логика вовсе не означает, что в него надо пихать что попало а потом парсить
 
Сверху