Создание таблицы по шаблону

Copenhagen

Новичок
Мне требуется создать много похожих таблиц на основе каталога товаров, для упрощения этой цели логично сделать функцию вывода таблицы по шаблону. С этим у меня возникли трудности.
Для примера, возьму максимально простой шаблон для содержимого одной ячейки таблицы: 'p_id / p_name / p_price'. Соответственно, результат - содержимое ячейки - должно быть такое: '1 / бокал / 99'.
Шаблон, по идее, надо преобразовать в строку с переменными. Это необходимо сделать один раз, не занимаясь преобразованием шаблона для каждой новой строки таблицы.
Я решил сделать сделать массив для замены известных в шаблоне элементов в ссылки:

PHP:
$transform = array (
'p_price' => &$arr[ 1 ],
'p_id' => &$arr[ 2 ],
'p_name' => &$arr[ 3 ],
);
Преобразование делается через strtr().

PHP:
$stringCell = strtr('p_id / p_name / p_price', $transform);
Далее таблица создается циклом:
PHP:
for($i=0,$n=sizeof($data); $i<$n; $i++) {
$arr = $data[$i];
echo "<tr><td>...</td><td>$stringCell</td></tr>"; 
}
HTML:
Все вроде как должно работать и должно получится что-то навроде
<tr><td>...</td><td>1 / бокал / 99</td></tr>
<tr><td>...</td><td>2 / фужер / 12</td></tr>
<tr><td>...</td><td>3 / ложка / 299</td></tr>

, но таблица на выходе пустая. Дело в том, что после strtr() строка не выглядит как
"&$arr[ 1 ] / &$arr[ 2 ] / &$arr[ 3 ]", а выглядит вот так " / / ".

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

Copenhagen

Новичок
Наверно, я запутано написал. Переформулирую, я хочу создавать таблицы с при помощи самописной функции на основе шаблона одной строки таблицы.
То есть чтобы функция с шаблоном-строкой создавала полностью весь html код для таблицы. Это должно выглядеть примерно вот так
createTable('td1' => #'картинка товара#', 'td2' => '#название товара# Производитель:#название производителя#, страна: #страна производителя#', 'td3' => '#цена товара# руб.').
У меня возникает вопрос, как шаблон-строку преобразовывать в готовый html код?
 

WMix

герр M:)ller
Партнер клуба
Copenhagen, у тебя каша в голове, те если уже генерить то grid, а эти мелочи пиши html'ом, если шаблонизатор, то возьми тотже smarty.
 

Copenhagen

Новичок
Если шаблон - то сразу смарти.... Я хочу по шаблону для строки создавать всю таблицу, слово "шаблон" можно заменить на паттерн, образец, трафарет.
Grid посмотрю, так сразу на первый взгляд не могу понять то или не то (в любом случае система сложная и платная). Пока хотелось бы получить помощь в моем вопросе. Неужели все движки интернет-магазинов используют для вывода каталога товаров в разных видах (для каталога, для страницы корзины) grid?
 

fixxxer

К.О.
Партнер клуба
Copenhagen, твой strtr выполняется 1 раз, ссылки ни на что не влияют, какая разница - вычисление уже сделано (1 раз), значение $stringCell присвоено (1 раз).

Сделай функцию, вида
PHP:
function parseTemplate($template, array $vars) {
    return strtr($template, $vars);
}
и используй ее в цикле. Правда, неясно, чем это лучше простого
PHP:
echo "$vars[name] / $vars[price]";
Но это не решает проблемы мешанины кода с html. Научись использовать шаблоны. Смарти/твиги необязательно (хотя они намного удобнее хотя бы из-за автоматического применения htmlspecialchars), можно начать с чего-то простого, как тут: http://phpfaq.ru/tpl
 

Copenhagen

Новичок
Copenhagen, твой strtr выполняется 1 раз, ссылки ни на что не влияют, какая разница - вычисление уже сделано (1 раз), значение $stringCell присвоено (1 раз).

Сделай функцию, вида
PHP:
function parseTemplate($template, array $vars) {
    return strtr($template, $vars);
}
и используй ее в цикле. Правда, неясно, чем это лучше простого
PHP:
echo "$vars[name] / $vars[price]";
Но это не решает проблемы мешанины кода с html. Научись использовать шаблоны. Смарти/твиги необязательно (хотя они намного удобнее хотя бы из-за автоматического применения htmlspecialchars), можно начать с чего-то простого, как тут: http://phpfaq.ru/tpl
Чтобы strtr выполнялся один раз, будет такая конструкция:

PHP:
$transform = array (
'p_price' => &$arr[ 1 ],
'p_id' => &$arr[ 2 ],
'p_name' => &$arr[ 3 ],
);

$stringCell = strtr('p_id / p_name / p_price', $transform);

for($i=0,$n=sizeof($data); $i<$n; $i++) {
$arr = $data[$i];
echo "<tr><td>...</td><td>$stringCell</td></tr>";
}

Так ничего не работает, таблица пустая создается.

Работает вот такая конструкция:

PHP:
for($i=0,$n=sizeof($data); $i<$n; $i++) {
$arr = $data[$i];

$transform = array (
'p_price' => &$arr[ 1 ],
'p_id' => &$arr[ 2 ],
'p_name' => &$arr[ 3 ],
);

$stringCell = strtr('p_id / p_name / p_price', $transform);

echo "<tr><td>...</td><td>$stringCell</td></tr>";
}
В ней strtr выполняется столько раз, сколько строк в таблице. Ссылки в этом случае, понятно, бессмысленны.
Смысл моего вопроса как убрать это многократное strtr. Для 100 строк будет 100 операций strtr, в каждой из которой обрабатывается большой массив замен, - получается много лишних действий.
 
Последнее редактирование:
Сверху