шаблоны. флейм.

Wsc

Guest
Не пойму откуда такая нелюбовь к Smarty?

<tr>
{foreach item=category from=$categories}
<td valign="top" >text</td>
{if $category.count is div by $cols}
</tr><tr>
{/if}
{/foreach}
</tr>

Логика в шаблоне, конечно, это как бы не есть гуд, но в данном случае это допустимо.
Либо как вариант, в соответсвие с парадигмой MVC и принципами ООП пишем класс, который будет рассчитывать количество ячеек в колонках и т.д. и т.п. В результате, получим думаю код раз в 10 больше того, который пишет hello world! на phppatterns.com :)
 

Фанат

oncle terrible
Команда форума
не то, чтобы нелюбовь.
просто я не вижу смысла писать на смарти то, что можно написать на пхп.
Принцип неумножения сущностей.
Если смарти ничего принципиально не даёт нового, то зачем мне учить второй язык? Если уж я буду учить второй - то это будет xslt.
 

fixxxer

К.О.
Партнер клуба
Честно говоря, в данном случае не вижу абсолютно никакой разницы между шаблонами на PHP и Смарти. :)

Удобным был бы синтаксис наподобие
<table cols=3>
{ foreach $item in $items }
<td>{ item }</td>
{ /foreach }
</table>

Или, еще лучше - <table cols=3 data-source=items> :)

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

Те же претензии (к громоздкости и сложности) и к XSLT, хотя все идет к тому, что знание XLST станет обязательным для верстальщика.
 

LeaetherStrip

Новичок
Я проще делаю (Smarty не пользуюсь)
Для вывода по колонкам пользую примерно такой код:

///////////////////////////////////

function start_table()
{
echo '<TABLE>';
}

function start_cell($i, $max)
{
global $starts, $ends;
echo $starts[$i%$max];
}

function end_cell($i, $max)
{
global $starts, $ends;
echo $ends[$i%$max];
}

function end_table($i, $max)
{
if($i%$max)
for($j=$i-$max;$j<($i-$i%$max);$j++)
{
start_cell($j,$max);
echo '&nbsp;';
end_cell($j,$max);
}

echo '</TABLE>';
}

$vals = array(1,2,3,4,5,6,7,8,9,10);

////////////////////////////////////
// В шаблоне
////////////////////////////////////

$starts[0] = '<TR><TD>';
$starts[1] = $starts[2] = '<TD>';

$ends[0] = $ends[1] = '</TD>';
$ends[2] = '</TD></TR>';

$cols = 3;

start_table();

for($i = 0; $i < count($vals); $i++)
{
start_cell($i,$cols);

// вывод данных....
echo $vals[$i];

end_cell($i,$cols);
}

end_table($i,$cols);

///////////////////////////////////

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

Конечно, код далеко не идеальный, но зато почти линейный :) проверка одна - при завершении таблицы.
 

Wsc

Guest
to Фанат:
Все же Smarty позволяет в какой-то мере отделить код от оформления, тем более дизайнеру не обязательно знать все тонкости и аспекты Smarty, достаточно знания решения таких вот задач. Т.е. как где-то здесь на форуме встречалось - дизайнер и программер договариваются только о пространтсве используемых имен переменных и на этом их сотрудничество заканчивается. :) Но, это, конечно мечты.

to fixxxer:
>знание XLST станет обязательным для верстальщика.

Кстати, видел уже много объяв, где в требованиях для верстальщика указывалось знание Smarty
 

diamond_krnl

pure-php
Автор оригинала: Фанат
во-первых, не код от оформления, а код приложения от кода оформления.
во-вторых, пхп позволяет сделать то же самое.
Не вижу никакой разницы. Вообще
респект, смарти - бесполезная штука.
юзаю - ob_start(), include(), ob_get_clean() - счастлив как ребёнок (раньше пользовался смарти и всякое самописное дерьмо).
 

vafel

Новичок
в конкретном случае врядли можно без кода в шаблоне обойтись. в function new_col($counter,$cols) все равно нада будет лазить чтобы классы к <td> к примеру дописать или последний <td> обработать.
 

Фанат

oncle terrible
Команда форума
в конкретном случае врядли можно без кода в шаблоне обойтись
С Новым годом!
А то никто не знал. =)
Только не в "конкретном", а ЛЮБОМ случае, совершенно любом.
Без кода в шаблоне не обойтись.
function new_col($counter,$cols) все равно нада будет лазить
не надо никуда лазить. html есть только в шаблоне.
 

vafel

Новичок
что значит в любом ?
для вывода хелло ворлд тебе тоже код в шаблоне надо ?
 

LeaetherStrip

Новичок
Screjet
Это что ж получается - каждый раз дополнительно массив $rows готовить?
 

Фанат

oncle terrible
Команда форума
LeaetherStrip, совершенно верно.
Если ты работаешь с шаблонами, то для шаблона тебе, по определению, надо готовить данные.
в данном случае - массив.
 

LeaetherStrip

Новичок
Фанат
я в курсе =)

насколько я понял, в срежетовом решении надо сначала из "одномерного" массива сделать "двумерный". А потом использовать.

Так ли это необходимо?
 

Wsc

Guest
Автор оригинала: diamond_krnl
респект, смарти - бесполезная штука.
юзаю - ob_start(), include(), ob_get_clean() - счастлив как ребёнок (раньше пользовался смарти и всякое самописное дерьмо).
не разобравшись не стоит писать свое мнение.
дизайнер у тебя работает с php-скриптами твоими?
Еще проще вообще в одну строку весь код записать - быстрее работает. :)

-~{}~ 04.05.05 15:18:

Автор оригинала: LeaetherStrip
Фанат
я в курсе =)

насколько я понял, в срежетовом решении надо сначала из "одномерного" массива сделать "двумерный". А потом использовать.

Так ли это необходимо?
$rows должно быть определно в коде скрипта.
что опять же приводит к дополнительным сложностям.
 

Фанат

oncle terrible
Команда форума
diamond_krnl
юзаю - ob_start(), include(), ob_get_clean()
А зачем?
Так часто приходится обрабатывать готовый шаблон? что ты туда дописываешь?

А вообще, разговор не о смарти.

Wsc
дизайнер у тебя работает с php-скриптами твоими?
а у тебя со смарти-скриптами твоими?
В чем разница, брат?

LeaetherStrip
Если не хочешь - не делай. Никто тебя не заставляет.

-~{}~ 04.05.05 15:23:

Wsc
что опять же приводит к дополнительным сложностям.
НИ К КАКИМ УСЛОЖНЕНИЯМ НЕ ПРИВОДИТ.
просто усложнение переходит из ШАБЛОНА В КОД.
Что есть просто прекрасно!

вот ты любишь отделение кода от дизайна?
Ты взгляни, взгляни в свои смарти-шиблоны, которые ты делаешь без внутренней дисциплины!
"усложнение " он нашёл. У себя поищи сначала.
 

Wsc

Guest
Фанат

>а у тебя со смарти-скриптами твоими?
>В чем разница, брат?

Он у меня Smarty выучил. :)
Ну то есть тот минимум, который необходим для табличной верстки сайта.
 

Фанат

oncle terrible
Команда форума
Ради бога.
Но к чему ты тогда задаёшь вопрос про дизайнера, который раотает с пхп-кодом?
 

LeaetherStrip

Новичок
Фанат
НИ К КАКИМ УСЛОЖНЕНИЯМ НЕ ПРИВОДИТ.
просто усложнение переходит из ШАБЛОНА В КОД.
Противоречия не замечаешь? ;)

Просто любопытно стало, зачем нарушать "принцип неумножения сущностей", о котором ты сам говорил. Когда есть решение без создания дополнительного массива.

А если вывод по колонкам понадобится не в одном месте/проекте?

Везде таскать за собой код создания $rows?

Если есть в этом какой-то высший смысл, может быть, пояснишь нам, непосвященным? :)
 

Wsc

Guest
Фанат

>вот ты людишь отделение кода от дизайна?
>Ты взгляни, взгляни в свои смарти-шиблоны, которые ты >делаешь без внутренней дисциплины!
>"усложнение " он нашёл. У себя поищи сначала.

:)
ок, просчитывай в программном коде количество строк, делай
универсальный метод вместо того, чтобы в коде шаблона написать 1 строчку
{if $category.count is div by $cols}

extreme programming рулит :)
 

Фанат

oncle terrible
Команда форума
LeaetherStrip
принцип неумножения сущностей не нарушается.
в скрипте есть только конструкция foreach.
вместо ДВУХ - foreach и нет - даже трёх - if и new_col - остаётся ОДНА.
Считать умеешь?
А если вывод по колонкам понадобится не в одном месте/проекте?
и чо должна означать эта глубокомысленная фраза?
А если мне понадобится код для работы с БД не в одном проекте? тодже с собой таскать??? Ужас какой!
Если есть в этом какой-то высший смысл, может быть, пояснишь нам, непосвященным?
Нет.
Высший смысл - он на то и высший, что не все проходят интеллектуальный ценз.
Пока ты не понял, что такое шаблон и зачем он нужен - тебе не понять, о чём я говорю.

А понимают - единицы.
вот, Wsc к примеру. Использует шаблонный движок, а что это такое, и для чего нужен - не понимает.

-~{}~ 04.05.05 15:37:

Wsc
ты не пробовал ЧИТАТЬ вопрос, с которого начинается эта тема? Читать смысл того, что написано, а не то, что тебе самому воображается, когда ты видишь слова-триггеры "шаблон", "смарти"?
попробуй.
Это важный скилл. В жизни пригодится.
 

diamond_krnl

pure-php
Wsc
Чесно сказать я не видел ни одного нормального верстальшика чтобы можно было полность ему довертися в шаблонах - PHP,XSLT,Smarty... не важно.

всё приходится проверять, иначе дров наломают.
не надо портить мозг креативных людей - дезайнеров-верстальщиков, засоряя вскимим языками. (=

Фанат
не в этом дело, порой шаблон страницы выглядит грубо говоря так:
<html>
<body>
<?=$args['content']?>
</body>
</html>

вот и приходится "ловить" буфер вывода модулей, так они запускаются до вызова шаблона.
 
Сверху