Методы и совершенстование шаблонизации

Quieteroks

Новичок
Здравствуйте.

Я уже год изучаю php, много задач решил для себя, теперь вот перехожу наконец на ООП и решил переписать свои шаблонизирующие функции в класс. И меня все больше интересует вопрос шаблонизации.

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

Так вот вопрос: Как можно шаблонизировать html странички, без применения регулярок и стандартных авто замен (strtr к примеру). Ну я про eval сразу нет. С ним у меня плохое отношение.

Собственно почему без них? Потому что их я уже освоил вполне...
Но вот хочу теперь попробовать взять какой нить DOM класс и при помощи него обрабатывать, но как я понял, это весьма весомые классы и для вставки в страничку пары переменных из скрипта, не стоит поднимать их. Но тем не менее, меня очень соблазняют их возможности.

Поэтому хочу сам сделать или используя DOM объект.
- В формы возвращать селектед или чекед не через переменную, а через вычисления наличия формы и данных, которые выбрал пользователь, сравнивая значения в атрибутах value и name, не добавляя для этого в шаблон переменную для парсинга регуляркой и вычисляя их значения в контролере при валидаци и шаблонизации формы.
- Или добавлять класс в зависимости от того, есть уже класс в теге или нет.
- Ну и так же поставил для себя задачу из двух шаблонных файлов сделать один. Пример: для генерации спичка использую два минишаблона, один обертка списка, второй элемент списка, подставляя в обертку генерированный список элементов.

Так что мне очень интересно, как можно шаблонизировать странички (без регулярок и str функций).
Или все же для этого лучше писать десяток регулярок?
Или все теги разбить explode каким нить. :)
 

Фанат

oncle terrible
Команда форума
Как можно шаблонизировать html странички, без применения регулярок и стандартных авто замен (strtr к примеру).
Собственно почему без них? Потому что их я уже освоил вполне...
кстати, хочу спросить, как у освоившего вполне.
каким образом делается вывод, скажем, такого HTML-я с помощью регулярок и автозамен:
PHP:
<a href=news.php?id=1>новости</a><br>
<a href=news.php?id=2>шок</a><br>
<a href=news.php?id=3>видео</a><br>
<a href=news.php?id=4>подробности</a><br>
 

Quieteroks

Новичок
Фанат
Читал я эту статью, а вы не дочитали мой пост видимо...

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

Quieteroks

Новичок
Фанат
Если ссылку храню в шаблоне, то загружаю ее в переменную и парсю.
В данном случае автозаменами.
Шаблон такой:
<a href="{link}">{title}</a>
Ну а потом в цикле переменную парсим и добавляем в другую переменную, которая в последствии выводится в шаблон, где ее нужно вставить.

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

AmdY

Пью пиво
Команда форума
Quieteroks
вот будет ещё интересно почитать http://www.php.net/manual/ru/book.tokenizer.php

советовать ничего не буду, вы довольно интересно мыслите и можете придумать что-нить оригинальное. поделитесь потом.
 

Quieteroks

Новичок
AmdY
Спасибо. Поделюсь.
Токениз пожалуй немного не то, легче explode'ром разбить теги в свою структуру и потом собрать заново страницу. :)

Кстати еще вот интересный вариант вычитал с применением strpos или mb_strpos. Находить и подставлять...
 

Фанат

oncle terrible
Команда форума
Читал я эту статью
Я не вижу в посте выводов, сделанных из прочтения.
PHP в качестве шаблонизатора решает львиную долю озвученных проблем, в первую очередь - 100500 файлов на одну страницу и использование регулярок. eval не требуется - с задачей прекрасно справляется include.
Встроенный токенизер included.

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

Фанат

oncle terrible
Команда форума
Собственно хочу чуть дальше уйти от этих сотен переменных, а генерить данные по атрибутам. В той же ссылке есть уже href="", почему не взять из нее значение, к примеру, если нужно ссылку сгенерить взяв ее из шаблона, отталкиваясь на включен или выключен mod_rewrite...
Можно увидеть пример кода шаблона страницы новостей, который будет использовать данный подход? Без реализации, просто пример шаблона, к которому ты стремишься. один пример стоит 100 тысяч слов.
сдаётся мне, ты не до конца продумал использование и видишь слишком идеальную картину, которая не выдержит столкновения с реальностью.
 

WMix

герр M:)ller
Партнер клуба
соглашусь с Фанатом,
сам PHP разрабатывался как язык шаблонов, и закручивать эту идею в новый шаблонизатор, напоминает мне замечательную штучку, smarty, наши парни в "восторге" от этого наследия, хотя там хотяб подумали о препарсинге и оно довольно быстро работает...

но вдумайся о богатстве языка PHP и о бедности шаблонов!
попробуй сформулировать задачу и ответить на важный вопрос "А ЗАЧЕМ?".
 

WMix

герр M:)ller
Партнер клуба
Quieteroks
Вот тебе в помощь
http://code.google.com/p/phpquery/wiki/Selectors
Но учитывай, что это все будет довольно тормозно, проще взять xslt ;)
прикольная конечно штучка,.. хотя мне ближе синтаксис xPath..

но самок важное: в шаблонах наоборот все, шаблон управляет разметкой, структура документа неизвестная! какой резон от данных селекторов?

XSLT классная штучка, но в этом случае яб отдал парсинг клиенту! сразу проблема, не каждый клиент поддерживает XSL

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

WMix

герр M:)ller
Партнер клуба
Quieteroks
вот будет ещё интересно почитать http://www.php.net/manual/ru/book.tokenizer.php

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

WMix

герр M:)ller
Партнер клуба
ну пусть :) поиграется...

кстати вспомнил что в JSF все это уже готово, может Quieteroks вам стоит поглядеть как делают ораклы? это действительно красивый язык
 

Quieteroks

Новичок
Фанат и WMix
Меня как раз таки с головой хватает php для шаблонизации. Именно по этому я не смотрю в сторону Smarty и прочего, что делает то же самое что и php.
Но данные в шаблон вставлять то нужно, не все же конкатенацией генерить. А include и eval мне не нравятся. Я кстати тут же вопрос давно поднимал, что в момент внедрения в шаблон добавляется неизвестный символ...
Я понял Вас, я описал, но вы не поняли смысл описанного. Вот Вам пример.

Что я имею сейчас:
Два файла с шаблоном: ul-wrapper.tpl и li-row.tpl
Содиржимое ul-wrapper.tpl

<ul class="menu">{list}</ul>

Содержимое li-row.tpl

<li><a href="{link}" title="{title}">{title}</a></li>

Все это дело подгружается в переменные для парсинга в скрипте.
Парсинг происходит из базы допустим. Получаем строку в цикле while и обрабатываем массив при помощи strtr и заменяем все title и link. И так же вставляется в обертку весь список.

Что я хочу.

Один единственный шаблон. menu.tpl

Содержимое
<ul class="menu">
<!-- row start -->
<li><a href="{link}" title="{title}">{title}</a></li>
<!-- row end -->
</ul>

А еще лучше без допустим {link}, потому что атрибут для вставки ссылки мы имеем и можем его найти.
Таким образом я планирую найти row комментарий (чисто для примера), взять его содержимое и парсить. Меньше мелких файлов подгружать. Или я не прав?

Далее. Что касаемо форм.
<form>
<input type="radio" name="test" value="test1"{selectedtest1}>
<input type="radio" name="test" value="test2"{selectedtest2}>
</form>

И так для каждой формы я вставлю свои переменные для отображения выделенной кнопки пользователем.
Не практично? Или я опять не прав? В любом случае как то этот селектед вернуть нужно. Либо так, либо через смарти с тем же кодом подстановки. Разница?

А хочу сделать просто форму, котору я смогу парсить и если ее свойство value совпадает с тем, что в $_POST['test'] добавить атрибут селектед или чекед...
Приятнее же это сделать в импровизированном шаблонизаторе. Не всегда же ручками обрабатывать и копипастить код из модуля к модулю для обработки одного и того же.

fixxxer
Читал я про него. Штука хорошая, но ресурсов наверно еще больше съест, чем DOM.
Что вы имеете в виду, пусть поиграется? С библиотекой phpquery?

Так вот вопрос ко всем. Почему никто не любит шаблонизаторы? Простейшие, которые вам же жизнь облегчат.
Собрал массив для вывода в страницу и запустил функцию которая все это вставит в шаблон.

Посоветуйте тогда, как шаблонизировать правильно? <?=$content;?> не предлагать точно.
 

Quieteroks

Новичок
ну пусть :) поиграется...

кстати вспомнил что в JSF все это уже готово, может Quieteroks вам стоит поглядеть как делают ораклы? это действительно красивый язык
JavaServer который? Интересный конечно язык, но php мне больше нравится. Особенно его функционал.
 

fixxxer

К.О.
Партнер клуба
Quieteroks
Почему не любят? Я вот твиг использую, кто-то любит нативные php шаблоны, на самом деле боьлше дело вкуса.
<ul class="menu">
<!-- row start -->
<li><a href="{link}" title="{title}">{title}</a></li>
<!-- row end -->
</ul>
blitz :)
 

Quieteroks

Новичок
fixxxer
Блитз можно наверно перенастроить или поковыряться в нем для поиска нужной функции...

Твиг кстати сейчас врем я от времени ковыряю. Сказали что один из самых быстрых. Пытаюсь в его логике разобраться.
Не спорю по поводу дела вкуса. Вот и я хочу под свой вкус наковырять пару функций. :)
Но ту же встает вопрос про регулярки в основном. А они медлительны.
 
Сверху