1

Тема: Полноценные шаблоны

Доброго времени суток!
Я бы хотел иметь возможность полностью кастомизировать сайт, т.е. вставлять собственные элементы и темы.
Вопрос: почему не используется полноценный template engine? Ваши вставки вида

<!-- something -->

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

Пример: мне не нравится внешний вид breadcrumbs, я бы хотел заменить их на свои собственные. Но для этого приходится лезть черт знает куда :( Все проблемы сами бы решились, если бы использовался какой-нибудь из php-шных шаблонизаторов.

30.07.2014 06:22:55. Текст был изменен (hindsight).

2

Re: Полноценные шаблоны

почему не используется полноценный template engine?

Из соображений производительности. Шаблоны с метками можно однозначно разобрать заранее и сказать, какие части страниц нужно готовить, какие запросы делать к базе данных и т. д.

3

Re: Полноценные шаблоны

Запросы к базе тут не при чем. А производительность не очень упадет, думаю.
P.S. это довольно странно - писать на php и так заботиться о производительности. Писали бы на C++ :)

4

Re: Полноценные шаблоны

hindsight пишет:

P.S. это довольно странно - писать на php и так заботиться о производительности. Писали бы на C++ :)

Ещё страннее приходить в отлично сделаный проект и раздавать советы, да ещё по теме, в которой слабо разбираетесь.
Вам же ясно ответили почему и зачем.

Я рекомендую посмотреть в сторону Monstra (очень простой движок, без баз) или instant cms  (большой, с кучей шаблонов, блоков и так далее). Думаю, что это больше вам подходит.

5

Re: Полноценные шаблоны

boo пишет:
hindsight пишет:

P.S. это довольно странно - писать на php и так заботиться о производительности. Писали бы на C++ :)

Ещё страннее приходить в отлично сделаный проект и раздавать советы, да ещё по теме, в которой слабо разбираетесь.
Вам же ясно ответили почему и зачем.

Очень даже разбираюсь.

Я рекомендую посмотреть в сторону Monstra (очень простой движок, без баз) или instant cms  (большой, с кучей шаблонов, блоков и так далее). Думаю, что это больше вам подходит.

Спасибо конечно, но я знаком с альтернативами. Меня заинтересовал именно ваш (или не ваш) проект. Отсутствие шаблонов показалось серьезным минусом, а "соображения производительности" - весьма жидкой отмазкой. Но конечно же решать вам, так что не буду больше спорить.

Удачи!

03.08.2014 13:30:13. Текст был изменен (hindsight).

6

Re: Полноценные шаблоны

Я полностью согласен с @hindsight. Шаблонизатор это очень важная вещь для работой с темами оформления. Отсутствие шаблонизатора ограничивает порог вхождения, а также не дает возможность дизайнерам (верстальщикам) менять HTML структуру сайта. А генерация HTML'а средствами PHP делает модификацию HTML'а невозможным для людей не знающих PHP.

Ваш процедурный движок и так быстро работает. И пожалуй я согласен опять с @hindsight:

hindsight пишет:

P.S. это довольно странно - писать на php и так заботиться о производительности. Писали бы на C++ :)

Это верно подмечено. Тут особого удара по производительности не будет. К тому же согласитесь что процедурный псевдо-код шаблонизатора:

$template = s2_create_template();

s2_assign_variable($template, 'last_comments', s2_last_article_comments());

Или хотя бы Smarty:

$smarty = new Smarty();

$smarty->assign('last_comments', s2_last_article_comments());
$smarty->display('index.php');

Выглядит лучше чем костыль через strpos:

if (strpos($template, '<!-- s2_last_comments -->') !== false && ($last_comments = s2_last_article_comments()))
    $replace['<!-- s2_last_comments -->'] = '<div class="header">'.$lang_common['Last comments'].'</div>'.$last_comments;

Что вы думаете?

7

Re: Полноценные шаблоны

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

Суть же в том, что шаблоны с метками типа <!-- something --> определяют структуру будущей страницы. Движок может не делать впустую сложных вычислений, если не находит соответствующей метки.

Перемешанный html- и php-код не имеет прямого отношения к вышеупомянутым шаблонам и не дает никаких оснований называть метки ущербными.

Я в свободное время по-немногу делаю рефакторинг движка. Можете посмотреть тут: https://github.com/parpalak/s2
Сейчас это нестабильная версия 2.0dev. Использовать ее можно только на свой страх и риск. Пока по структуре БД она совместима с 1.0.

В версии 2.0dev html-код выделен в специальные view-файлы. Они могут переопределяться в стилях.

8

Re: Полноценные шаблоны

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

Прямо как в анекдоте про менеджера и программиста :)

Хм... мне интересно, вы бы не были против если бы я переписал S2 на свой вкус и выложил бы на общее обозрение тут?

9

Re: Полноценные шаблоны

Роман, скажу Вам как разработчик разработчику. Метки вида <!-- ... --> имеют название - это html-комментарии. Делать их шаблонами, выполняемыми на стороне сервера - это действительно очень плохой стиль. Ленивые вычисления почти наверняка поддерживаются каким-то (уже существующим) шаблонизатором PHP. Вы изобретаете велосипед. И не удивительно, что появились люди, с Вами не согласные.

С другой стороны я, бесспорно, уважаю Ваше право делать все так, как Вы желаете в Вашем проекте. Отсутствие шаблонов, к сожалению, сделало его неприменимым для меня, и мне пришлось писать свой движок. Но это мои проблемы, и Вы тут действительно не при чем.

08.11.2014 00:01:32. Текст был изменен (hindsight).

10

Re: Полноценные шаблоны

volter9, не против.

11

Re: Полноценные шаблоны

hindsight пишет:

Ленивые вычисления почти наверняка поддерживаются каким-то (уже существующим) шаблонизатором PHP. Вы изобретаете велосипед.

Ленивые вычисления может быть и существует, но тут не обойтись без PHP5 и замыканий.

PHP сам по себе велосипед. Многие функции всего лишь тонкие обертки. У PHP много проблем, советую почитать на эту тему статью PHP: фрактал плохого дизайна (en). Там все ясно выражено.

Но меня удивляет что некоторые крутые сайты вроде как Facebook или Wikipedia используют PHP. Видимо PHP принимает людей и их код какой он есть, не взирая на их проблемы и недостатки.

08.11.2014 00:10:39. Текст был изменен (volter9).

12

Re: Полноценные шаблоны

hindsight, ваши фразы "скажу Вам как разработчик разработчику" и "Я очень плохо знаю php и для меня это проблема" не сочетаются друг с другом. Вы только подтверждаете мое предположение (которое volter9 просил высказать).

Попробую написать про шаблоны последний раз.

Упрощенный алгоритм работы движка выглядит так:
1. Разобрать URL страницы и определить ее структуру.
2. Сделать запросы к базе данных для получения фрагментов страницы: меню, списков ссылок и прочего.
3. Сгенерировать html-код фрагментов страницы.

В движке есть инструмент, который определяет структуру страниц. Я назвал его "шаблоны" ("templates"). Метка вроде <!-- s2_menu --> решает две задачи: она говорит, что на странице должно быть меню, и указывает, где именно. Метки по форме совпадают с html-комментариями, чтобы несработавшие метки не появлялись на экране.

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

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

Кстати, про "плохой стиль". О чем тогда думали разработчики SSI? https://ru.wikipedia.org/wiki/SSI_(программирование)

08.11.2014 20:17:31. Текст был изменен (Роман).

13

Re: Полноценные шаблоны

Роман, я разработчик, но пишу не на php. Такие все еще встречаются.

В движке неудовлетворительно выполняется третья из описанных вами задач. А именно: шаблон страницы определяет лишь ее общую структуру; невозможно изменить код конкретных компонентов. При дальнейшем исследовании (насколько сейчас помню) оказалось что код компонентов генерируется из какой-то **пы (извиняюсь) внутри php. Именно поэтому я предложил использовать шаблонизатор.

P.S. даже SSI использует другой формат <!--# ... -->, что позволяет отделить includ-ы от html-комментариев.

08.11.2014 17:17:11. Текст был изменен (hindsight).

14

Re: Полноценные шаблоны

Роман, я думаю эту бурную дискуссию можно закончить одним вопросом:

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

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

15

Re: Полноценные шаблоны

hindsight, спасибо за исправление. Конечно, речь шла о третьей задаче, а не второй.

Как я написал выше, в следующей версии в движке появятся представления (view) такого типа: https://github.com/parpalak/s2/blob/mas … crumbs.php

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

Кто-то решает свои задачи движком, кому-то он не подходит. Это нормально.

16

Re: Полноценные шаблоны

Ну тогда, я думаю было бы неплохо если бы вы прочитали книгу Мэтта Зандстры: PHP. Объекты, шаблоны и методики программирования.

Или если ООП вас не интересует, то хотя бы книгу Роберта Мартина: Чистый Код. :)