мнения об использовании OBTemplate

REMO

Guest
Шаблоны?

Кто нибудь сталкивался с библиотекой темплейтов, OBTemplate? Хотелось бы услышать мнения об использовании?

http://dev.e-taller.net/obtemplate/review/ - здесь автор OBTemplate провел сравнение своего класса с другими шаблонными движками. По его данным, все отдыхают. На сколько этому можно верить. (Понимаю, что не экстрасенсы, но может, кто то тестил сам или где то что то читал по этому вопросу)

Сенкс.
 

su1d

Старожил PHPClubа
REMO, вообще-то я делал этот "движок" только лишь для того, чтобы показать в том обзоре, что чем меньше РНР-кода парсится, тем быстрее движок работает.

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

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

в общем, я бы порекомендовал поискать какой-нибудь другой шаблонизатор для работы: Smarty, php_templates, PEAR-шаблоны или даже XSLT.
 

REMO

Guest
Автор оригинала: su1d
REMO, вообще-то я делал этот "движок" только лишь для того, чтобы показать в том обзоре, что чем меньше РНР-кода парсится, тем быстрее движок работает.
Спасибо, за комментарии. Они многое проясняют :)

Я сейчас использую немного другой способ. А именно сами шаблоны содержат PHP код (что я так понимаю не совместимо с современным пониманием концепции шаблонов). В части шаблона, где расположен контент просто стоит require "/content/".$content; Т.е. подставлялся какой то фаил так же имеющий смешанно html и ПХП код.

Таким образом получалось, что запуская скрипт list_goods.php, в нем указываю имя шаблона, и имя контента ($content).

И все вроде бы великолепно работает. Причем то, что php и html не разделены это "в принципе" ерунда. Не столь важно.

ВОПРОС: кроме того, что шаблоны отделяют php от html и позволяют тем самым работать дизайнеру и программеру отдельно, какие еще преимущества мы получаем?

*в частности меня беспокоит следующее: допустим в шаблон необходимо добавить или убрать какие то псевдотеги. Придется дергать программиста, чтобы он смотрел парсит ли такой то скрипт в таком то щаблоне такой то псевдотег? Ведь не может же скрипт парсить все абсолютно псевдотеги.

Я понимаю, что вопросы ламерские. Но тяжело оценить все преимущества и недостаки шаблонов, не поиспользовав их. А переходить на их использование и потом разочароваться в этом не хочется.

Спасибо.
 

su1d

Старожил PHPClubа
REMO, почитай страницу по ссылке, что дал Фанат. там -- полезная инфа по шаблонам.

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

тем не менее, работать с шаблонами очень и очень удобно тебе же самому в первую очередь потому, что когда клиент просит тебя заменить что-то на странице, чаще всего достаточно лишь влезть в шаблон и поправить всё там, и для этого не нужно разбираться в очередной раз в логике работы скрипта, написанного тобой (или даже не тобой) полгода-год назад. и даже если требуется немножко изменить логику, то опять же чаще всего сработает какой-нибудь quick and dirty hack, когда ты просто добавляешь ещё одно поле в массив с данными для шаблона вместо того, чтобы править несколько строчек вывода ХТМЛ-таблицы.

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

допустим в шаблон необходимо добавить или убрать какие то псевдотеги...
кажется здесь ты имеешь в виду то, что я называю Driven controller architecture, т.е. когда Контроллер -- твой код -- смотрит в шаблоне список тэгов, которые нужно обработать и генерит данные только для них, не напрягая лишний раз сервер и БД для тэгов, которые не пригодятся.

по-моему такой фичи нет в большинстве шаблонизаторов, написанных на РНР. в своём же php_templates я ввёл ф-цию tmpl_structure() специально для этого.



совсем недавно я наткнулся на интересную идею реализовать шаблонизатор на DOM-функциях. это может сработать, т.к. Дизайнер будет делать странички в том же Дримвивере, лишь назначая нужные ID разным DIV'ам (а это там делается вполне легко и визуально без надобности лезть в код), а Программер грузит ХТМЛ в DOM и легко меняет содержимое нужных элементов:
PHP:
$dom->getElementById('name')->nodeValue = "Petrov";
к тому же DOM вполне предоставляет возможность посмотреть: какие тэги определены, а какие -- отсутствуют в шаблоне.

-~{}~ 03.06.04 12:28:

Фанат, неа, нет правеньев. обращайся к модерам, а я уже давно как не.
 

Фанат

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

REMO

Guest
2su1d

А как все это прикрепить к локальной тачке :) Пытался понять как это сделать, вся дока на аглицком, и хотя с ним у меня не все так плохо. Но видимо клвалификации не хватает :(

Now run the following commands:

cd templates
phpize
./configure --enable-templates=shared
make
(эти строки взяты из доков, при описании подключения php_templates as external module)

- это где набирать? (я так понимаю, что в shell, а если у меня Win?). Сорри за ламерский вопрос, самому стыдно :mad:

У меня стоит комплекс денвер. OS: Win XP
 

su1d

Старожил PHPClubа
tony2001 уже давно всё перевёл: http://tony2001.phpclub.net/tdoc_rus/
=)

-~{}~ 04.06.04 11:16:

вообще же, тебе нужно скачать уже готовую DLL'ку, соответствующую твоей версии РНР, положить её в папку "ext", и прописать должным образом в php.ini
 

REMO

Guest
2su1d

Спасиб. Разобрался.

-~{}~ 07.06.04 13:23:

Я раньше использовал следующий код.

<?if($class == "...") echo "class=s1"; else echo "class=sub"?>

Т.е. в зависимости от $class он устанавливал определенный class для элемента (ьаблицы к примеру).

Как это реализовать на шаблонах? Учитыая скажем, что таких элементов 4, пришлось бы генерить 4 псевдотега. А если элементов и того больше. Тогда что. Имхо не очень хороший вариант. Может можно как то по другому?
 

Church

Guest
su1d
Хмм.. Вопрос...
Чем хуже OBTemplate какого-нить современного "шаблонизатора", если реально нужны скины вида, которые и имеют место быть в OBTemplate?

И вопрос в догонку:

Notice: ob_end_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete

Это к чему? :)
 

su1d

Старожил PHPClubа
Church, если тебя полностью устраивают возможности OBTemplate, то пользуй конечно -- денег никто не попросит.

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


тот нотис -- небольшой баг =)
там нужно вставить проверку на то, что раннее был вызван ob_start(): вызвать ob_get_status() и убедиться, что вернулся непустой массив.
 

REMO

Guest
Кто нить на мой вопрос ответит :)

Я раньше использовал следующий код.

<?if($class == "...") echo "class=s1"; else echo "class=sub"?>

Т.е. в зависимости от $class он устанавливал определенный class для элемента (ьаблицы к примеру).

Как это реализовать на шаблонах? Учитыая скажем, что таких элементов 4, пришлось бы генерить 4 псевдотега. А если элементов и того больше. Тогда что. Имхо не очень хороший вариант. Может можно как то по другому?


P.s. Сорри это не флуд, а всего лишь попытка привлечь внимание :D
 

su1d

Старожил PHPClubа
REMO, в нормальном шаблонизаторе ты создаёшь тэг {class}, которому уже назначаешь нужное значение.

<div class="{class}">{content}</div>
 

Church

Guest
Автор оригинала: su1d
Church, если тебя полностью устраивают возможности OBTemplate, то пользуй конечно -- денег никто не попросит.

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


тот нотис -- небольшой баг =)
там нужно вставить проверку на то, что раннее был вызван ob_start(): вызвать ob_get_status() и убедиться, что вернулся непустой массив.
Такой маленький класс и еще поддерживать? :) Я не ожидаю от него лучше того, что он мне уже сейчас дает... Сам недавно пытался написать нечто похожее.... так и не смог :)
За объяснение нотиса - сенькс большое :)
За сам класс - еще больший сенькс :)
 
Сверху