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

Фанат

oncle terrible
Команда форума
Absinthe
вот здесь он совершенно прав. он сделал то, о чем его просили, а вы накинулись на него за это и увели тему в совершеннейший оффтопик. лишь бы чего написать
 

Quieteroks

Новичок
Absinthe
Приведенный тут код обрабатывает циклические данные наиболее простым методом автозамены.
У меня есть более сложная "универсальная" функция, которая так же обрабатывает ключи типа {menu.main} и подобное. И сама вызывает нужную функцию стоитель.
И вызывается так же просто как и метод класса. Но она у меня вызывается два раза, для парсинга контент данных и для парсинга индекса.
Но там без регулярки не обошлось. Она ищет и отдает на анализ переменную. Что наверняка все же дольше чем запустить массив в функцию strtr.

В общем все понятно. Ни кто не поможет в этом вопросе.
Да, местами это говнокод. А кто сразу тут стал гуру программирования?
 

Фанат

oncle terrible
Команда форума
Вы считаете что нереально в php найти форму и в ней пройти по атрибутам input'ов?
Я считаю, что ты должен сначала написать пример шаблона, который хочешь парсить. Своего Идеального Шаблона.
Который получает ту же таблицу что и в приведённом мной примере.
 

WMix

герр M:)ller
Партнер клуба
Данный пример отработает отлично. Если это самостоятельная страница, но это ведь часть страницы. Ее нужно либо записать в буфере в переменную и внедрять вторым инклюдом в основной шаблон. И Ваш один вызов превращается уже не в простой вызов, а использование постоянного ob_get_content (не помню точного написания функции). Или основной шаблон тоже делим на шапку и футер? И уже три инклюда.
в твоем случае, Quieteroks, тоже самое только на уровне скрипта а не обработчика PHP плюс дополнительный парсинг
include по факту это вставка вместо него будет стоять другой кусок файла... и тебе придеться считать свой шаблон хоть даже если это file_get_contents и я неуверен что это быстрее или менее ресурсоемкое занятие...


А, вот в чем вопрос был. Да. Для меня шаблон это все что я вывел в html файлы. Каюсь. Но это же лучше чем писать шаблон в коде контролера.
не нужно писать шаблон в контроллере,.. ты опять не понял смысла PHP шаблона!
контролер оставь контролером, модель моделью а вот VIEW это шаблоны на твоем языке!
PHP:
<ul class="menu">
<!-- row start -->
<li><a href="{link}" title="{title}">{title}</a></li>
<!-- row end -->
</ul>
твой пример, Quieteroks, мне ужасно напоминает FastTemlate
PHP:
1: <!-- ПРИМЕР FastTemlate -->
2: <!-- NAME: main.tpl -->
3:   <html>
4:   <head><title>{TITLE}</title>
5:   </head>
6:   <body>
7:   {MAIN}
8:   </body>
9:   </html>
10:   <!-- END: main.tpl -->
11:  
12:  
13:   <!-- NAME: table.tpl -->
14:   <table>
15:   {ROWS}
16:   </table>
17:   <!-- END: table.tpl -->
18:  
19:  
20:   <!-- NAME: row.tpl -->
21:   <tr>
22:   <td>{NUMBER}</td>
23:   <td>{BIG_NUMBER}</td>
24:   </tr>
25:   <!-- END: row.tpl -->
эта штучка использовалась на переходе PHP FI в PHP 3 настолько стара... и эту идею уже развили в smarty и даже не в функционале дело а в том, то что после парсинга создает готовые PHP шаблоны... а знаешь почему? правильно -- СКОРОСТЬ..

и если проект smarty до PHP версии 4 лежал на smarty.php.net то сейчас его там нет. почему? правильно, нафига нам еще язык шаблонов, который не поддерживается ни одним IDE а это дополнительная проблема, после скорости!


ты просил другой способ шаблонов... ты прозевал!

в самом начале была задета тема XSL... когда твой пхп генерит не разметку а данные в виде XML а парсить ты отдашь клиету...
или обратный способ, ты описываешь свои формы, элементы связки transitons при переходах в XML... далее парсишь это заранее ТОЛЬКО ПОТОМУЧТО НУЖНА СКОРОСТЬ в обычный PHP
 

Absinthe

жожо
Фанат ок.

WMix для приличия бы факты перепроверил, на которые ссылаешься.
 

Quieteroks

Новичок
WMix
include по факту это вставка вместо него будет стоять другой кусок файла...
Да что вы со мной как с ребенком. Знаю я как работает инклюд и буферизация. У меня в связке этих двух методов вышел конфуз, который не смог решить и подсказку не получил где копать.
Пользовался Notepad++ для верстки и программирования. Но либо Notepad чето все же химичит с UTF-8 без BOM, либо руки у меня кривые, раз уж три строчки кода себя так ведут безобразно.

не нужно писать шаблон в контроллере,.. ты опять не понял смысла PHP шаблона!
контролер оставь контролером, модель моделью а вот VIEW это шаблоны на твоем языке!
Я так и делаю, по крайней мере пытаюсь так делать. Поэтому и отделил по своему.

в самом начале была задета тема XSL...
Не прозевал, не хочу клиенту отдавать xml файл и там его парсить, при условии что клиент может быть мобильным и загрузка может быть через OperaMini.
Но сам процесс работы с html страницей как с xml файлом мне нравится. И то что можно сделать на стороне клиента, хотелось бы сделать у себя на сервере.

Фанат
Я считаю, что ты должен сначала написать пример шаблона, который хочешь парсить. Своего Идеального Шаблона.
Который получает ту же таблицу что и в приведённом мной примере.
Элементарный шаблон. Чистый html. В частности формы:

PHP:
<form>
   <input type="text" name="name"><br>
   <input type="radio" name="test" value="test1"> Выбор один<br>
   <input type="radio" name="test" value="test2"> Выбор два<br>
</form>
А после обработки, если пользователь уже сделал свой выбор, но не все заполнил допустим, проверяем саму форму без дополнительных вставок функций в сам шаблон.

Итог обработки:
PHP:
<form>
   <input type="text" name="name" value="Илья"><br>
   <input type="radio" name="test" value="test1"> Выбор один<br>
   <input type="radio" name="test" value="test2" cheked> Выбор два<br>
</form>
При этом шаблон чистый, без лишнего кода. Но результат вернулся пользователю.
Через Dom в принципе это можно сделать, но кажется там несколько не так все просто, как кажется на первый взгляд. Справку еще читаю.
Это выполнить php шаблоном не возможно в чистом виде. Или я не прав?

Если однажды я решу проблему с буферизацией, вернусь на сторону добра. Сейчас меня интересует темная сторона шаблонизации. :)
Возможно все же Notepad++ говно. Но удобный же.
 

Фанат

oncle terrible
Команда форума
Который получает ту же таблицу что и в приведённом мной примере.
Я не знаю, как ещё написать, чтобы было понятно.

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

В общем, я понял. ты сам не знаешь, чего хочешь, в голове одни неясные идеи и смутные фантазии.
 

Quieteroks

Новичок
Фанат
Я думал об этом. Но ведь даже если формы две на странице, имена же для input'ов разные должны быть.
Так что просто достаточно найти все формы и по имена сравнивать. Фантазия? Да, но ведь реализуемо вполне.
И я не говорю, что он должен только формы обработать. Формы он обработает один методом, если массив $_POST не пустой.

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

AmdY

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

Quieteroks

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

AmdY

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

Фанат

oncle terrible
Команда форума
AmdY
Ты не даёшь себе труда читать, что он пишет.
А пишет он полную ерунду.
К примеру, списки в 99% случаев генерируются тем же шаблонизатором.
А у него список прописан в шаблоне.

Фишка, нужная в 1% случаев.
И так у него всё.

так что запутать его сложновато будет. он и так уже

ты даже его вопроса не прочёл - "нет ли такой волшебной палочки, которая выдаст тебе дерево дом, не парся документ"
 

Quieteroks

Новичок
AmdY
Да нет, сейчас как раз можете дать отправную точку.
Суть кода будет проста, достаточно. Открыть шаблон, пройти по нему и сделать нужные изменения.
Сейчас я это могу сделать регуляркой. Причем их наверно нужно будет много.
А можно ведь то же самое сделать какими нить strpos() и тогда уже более быстро все это возможно обработать.
А может вообще на низком уровне начать парсинг файла построчно.
Вариантов ведь много.

Фанат
Ну так скажите как правильно.
Не могу я сейчас применять php шаблон.
Чем заменить? Скачать Smarty и его юзать?

Кстати по поводу списка.
Сейчас я хочу списком вывести меню, завтра div блоками.
Почему не вывести его в шаблон?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Quieteroks
Вот так у меня
- есть класс Template, использует он __get, __set, функции хелперы (типа phone, percent и т.д.)
- перегружен метод ___toString
- синтаксис php устраивает на 100%
- загрузка блоков ->template('module/tpls/subtemplate.tpl'), с автоматическим наследованием переменных шаблона
- использует он предкомпиляцию, заменяет <? на <?php, <%= <?=htmlspec.... и т.д.
- использует предкомпиляцию для парсинга ситнтаксиса тип <widget:tabs><tabs:item title='Закладка 1'/> и т.д.
- есть в нем и прекомпиляция элементов форм <input:radiobox placeholder='xwedwedf' name="radio" value="{$id}"/>

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

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

Фанат

oncle terrible
Команда форума
Amdy прав.
Сейчас я это могу сделать регуляркой.
Можешь - вот и сделай. Тебе сказали - сделай хоть как-то.
Когда начнёшь делать, поймёшь все те вещи, о которых я пытаюсь тебе сказать, но ты их просто не понимаешь. Вещи, по сравнению с которыми твои нынешние проблемы покажутся детским лепетом.
поэтому совершенно неважно, как ты будешь делать - через регулярки или с заменами или ещё как-то.
ТЕБЕ ВСЕ УЖЕ ГОВОРЯТ - ПРОСТО НАЧНИ ДЕЛАТЬ!
Как можешь - так и делай. Главное - делай уже, а не языком болтай.
Скачать Smarty и его юзать?
Единственная здравая мысль за весь топик.
 

Фанат

oncle terrible
Команда форума
WMix
У тебя очень много спорных моментов. Но давайте не будем их здесь обсуждать. Можно создать отдельную тему и обсудить там.
 

Quieteroks

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

Фанат
Я пишу, что вы так громко то? Сейчас один класс закончу, перейду на рефакторинг шаблонизатора.
Хотел просто заранее узнать методы поиска данных в шаблоне.
Я же не прошу написать мне шаблонизатор. Не прошу реализовать мне все поиски, которые я хотел бы.
Мне нужна информация, какими встроенными средствами, я мог бы добиться желаемого результата.

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

Фанат

oncle terrible
Команда форума
Не выложишь ты здесь ничего [осмысленного] завтра :)
В лучшем случае - через неделю.
Торговаться не надо. Ты выложи сначала хоть что-нибудь, чем можно в реальности пользоваться.
А желающие покритиковать всегда найдутся.

Но скорее всего здесь появится постскриптум из серии "приобрел аппарат Олимпус за 200 рублей. Тема исчерпана."
 
Сверху