Вот, кстати, опять о шаблонах.

Фанат

oncle terrible
Команда форума
Интересная задача, из тех, что ломает все умозрительные представления. Я такие очень люблю.
Вот была у нас таблица "в полосочку", через одну. А потом дизайнер решил, что меняться будут три цвета, а не два.
В теории, "верстальщик" должен уметь поменять один внешний вид на другой. А как как на практиае справится ваш любимый шаблонизатор с этой задачей?

У блица клевая отмазка - он так и задуман, чтобы верстак работал на пару с програмилой. Хотя синтаксис там будет дай боже - три ифа?
 

Adelf

Administrator
Команда форума
С другой - а как его в шаблон впихнуть?
Шаблоны должны уметь многое, чтобы реализовывать любую логику представления. Слова одного человека, делавшего очень солидный продукт: "Делали сначала так, чтобы в шаблонах был только HTML и никакой логики. Верстальщики просили то это, то то. В итоге забили и дали им небольшой язык и они делали такую логику, которую они хотели"
 

Фанат

oncle terrible
Команда форума
Плюс смарти.
хотя это то, что мы называем, пожалуй, хелпером.
Хотя я не очень люблю хелперы. Это практически новый язык, который мы вводим, и который надо заучивать.

по аналогии на пхп я бы сделал
array(red green blue); и выводил бы... тем же % - $colors[$counter%3]
Но это мне очень не нравится. Скорее я бы менял программу, готовя ей данные заранее.

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

Alexandre

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

В том же XSLT есть и ифы или можно использовать <xls:call-template /> который формирует нужный аттрибут стиля.

Но зачем делать сложно, если можно делать просто???

когда-то я страдал шаблонизацией и на XSLT рисовал таблицы с colspan & rowspan
тратил на разработку шаблонов по одному-два а то и три дня
хотя, при добавлении одного- двух параметров на РНР и при организации иной структуры выходных данных это можно было сократить до 30-60 мин...
просто хотелось универсальности и разделения данных и кода. Но цена за это - снижение общей эффективности работы.
в общем антипаттерн - преждевременная оптимизация
 

Фанат

oncle terrible
Команда форума
Александр, ты, когда трезвый, удивительно разумные вещи пишешь :)))
 

Adelf

Administrator
Команда форума
в принципе да, но не надо усложнять жизнь верстальщику, или конструктору шаблонов (обычно их делает программист) и
просто добавить строчку в пхп, которая формирует имя цвета TR или имя класса стиля данной строки.
А почему этим должен заниматься программист?
Сидит программер, думает как бы отрефакторить эту сложную конструкцию, которая доставляет все больше проблем, и тут к нему подходит верстальщик - "слуш я(или дизайнер) тут хочу не две полосочки а три, ты бы не мог..." . И ключ к решению, только что пришедший в голову программеру, тут же улетучивается.
 

zerkms

TDD infected
Команда форума
в общем антипаттерн - преждевременная оптимизация
как раз наоборот. паттерн - разделение логики и кода. а антипаттерн - "преждевременный" отказ от академической стройности кода.
 

A1x

Новичок
Автор оригинала: *****
можно ли переделать раскраску в две в раскраску три только средставми шаблонизатора.
не совсем понятно, что значит это "только средставми шаблонизатора"

на пхп я бы сделал функцию аналогичную cycle из смарти
ее преимущество что она не делает никаких предположений о том где ее будут вызывать, счетчик внутренний.
инициализировал двумя значениями - будет две полоски, тремя - будет три

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

Alexandre

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

как раз наоборот. паттерн - разделение логики и кода. а антипаттерн - "преждевременный" отказ от академической стройности кода
тогда я тоже так думал... и на сложный шаблон тратил три дня.
а смог бы сделать за пол дня простой шаблон. Все равно - дизайн всех шаблонов на мне... Верстальщик только дивы правит.

Очевидно - со временем взгляды меняются. Недавно разгребал одну XSLT-тешную ЦМСку... ну и по напридумывали же там люди... С одной стороны - все хорошо, но шаг вправо-шаг в лево: панос.

А почему этим должен заниматься программист?
где бы найти такого верстальщика, который на нижепривиденный код сверстал красивый каталог, сделав при этом еще красивую группировочку ...
Код:
<items>
   <group  title="товар 1"  description="ssdfs" >
        <item  price="222" vol="2" >
        <item  price="111" vol="1" >
        <item  price="333" vol="3" >
  </group>
   <group  title="товар 2"  description="ssdfs" >
        <item  price="222" vol="2" >
        <item  price="111" vol="1" >
        <item  price="333" vol="3" >
  </group>
</items>
 

С.

Продвинутый новичок
Хотя я не очень люблю хелперы. Это практически новый язык, который мы вводим, и который надо заучивать.
Натив тем и хорош, что новый язык заучивать не надо.

по аналогии на пхп я бы сделал
array(red green blue); и выводил бы... тем же % - $colors[$counter%3]
По аналогии на ПХП надо было бы сделать:
PHP:
<?=cycle_values('white','black','red')?>
-~{}~ 18.08.09 13:10:

Кстати, вот тебе в коллекцию еще одна с виду простая, но задачка. Как красиво в шаблоне отобразить меню вида?

Аааа | Бббб | Вввв | Гггггг

| Аааа | Бббб | Вввв | Гггггг | -- не предлагать!
 

С.

Продвинутый новичок
А вместо того, чтобы переспрашивать собсна шаблон не суждено набросать?
 

Alexandre

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

Аааа | Бббб | Вввв | Гггггг

| Аааа | Бббб | Вввв | Гггггг | -- не предлагать!
использовать IF last()
есть как в смарти, так и в XSLT
или как вариант: IF position()=count(..) или что-то типа того
собственно непонятно в чем проблема :D
PHP:
 <xsl:if test="position() != last()"> | </xsl:if>
 

С.

Продвинутый новичок
Вот народ говорит об избежании логики в представлении даже там, где она реально есть. А в данном примере логикой вообще не пахнет и вдруг появлется какой-то гнилой иф. Вот в чем проблема!
 

zerkms

TDD infected
Команда форума
С.
нужно избегать бизнес-логики, а не логики вообще.
 

whirlwind

TDD infected, paranoid
Имеются скины страниц. В одном скине нужно закрашивать полосочки через две, в другом через три и в обоих наборы цветов или названия стилей по определенным причинам не совпадают. Ваши действия?

ЗЫ. Добавляем еще скин. Ваши действия?
 

zerkms

TDD infected
Команда форума
whirlwind
что такое "скин"? как они разделены между собой?
 
Сверху