Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Новый шаблонизатор или очередной велостпед
Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Пост конечно получился огромный (что то я разошелся), но все же наберитесь терпения и дочитайти до конца. Должно быть интересн.
Итак сначало Вступление.
Зачем вообще я завел эту тему!?
Года 3 я кодил на C# и C++, соответственно на .NET фреймворке. Тут судьба распорядилась так, что стал я заниматься php и прочей веб лабудой, месяца 3 или 4 уже. Когда я начал, после .NET, я конечно был в шоке от такого бардака (новички меня поймут, да и профи тоже должны). Спустя эти месяцы, меня сильно начали напрягать (сейчас надо правильно выразиться чтоб меня поняли...) шаблонизаторы которые существуют на данный момент ну или те о которых мне известно, точне то чего в них нет, и то, что они утверждают, что отделяют бизнес логику от логики отображения. Логика должа разделяться архитектурой приложения, и концепцией шаблонизатора. То что версальщик и кодер могут независимо работать, тоже байка, они по любому работают
сообща, а иначе один из них такой геморой получит, и на выходе полный изврат получится.
Для себя я сделал вывод что шаблонизаторы вообще безполезны. По сути они кроме изменений синтаксиса php ничего не предлогают, та как конструкция
парой лишних символов и тем что немного акуратней смотрится. Вот и пишу шаблоны на php быдлокоде.
Но что то я отвлекся от темы. Кто хоть раз связывался с WPF и xaml разметкой тот меня сразу поймет. Microsoft всетаки молодцы, такую класную вещь придумали. Вот только для php никто подобного не сделал. Хотя может и сделали, но я сегодня весь день ковырялся в инете, в поисках и увы.
Так вот, запарился я писать таким макаром шаблоны и хотельсь чтото типо WPF. Для своих целей я начал писать одну штуку, ниже опишу ее. Это будет чтото похожее на WPF, но очень урезаное и немного измененное.
Теперь ответ на выше поставленный вопрос, поднял я эту тему чтоб общественность высказалась, нужен этот велосипед или нет. По итогам так сказать голосования и коментариев я может напишу PEAR и PECL расширения. Плюс, я всетаки не все аспекты php знаю так что нужны советы и замечания Гуру, и пожелания простых смертных.
Теперь Вестч.
Начнем со структуры данных, у нас значит есть классы модели, неважно чо в них и как это все заполняетсяю Так же неких Класс ViewModel в котором эти модели как нам нужно содержаться.
Теперь наши шаблоны. Что бы примерно показать возможности системы я сделал два файла с расширением xml, такое расширение было выбрано просто потому что во всех код-редакторах неизвестные тэги и атрибуты нормально подсвечиваются, хотя правельней использовать расширение xaml.
Теперь внимание может быть очень много непонятного
Теперь насчет стандартных Элементов таких как TreeView, они состоят из обычных html тэгов и php кода, содержат минимум javascript-а для поддержания базового функционала на стороне клиента, и минимун css для правельного отображения. То есть, он легко стлизуем, и на него без вреда для здоровья можно лепить свои скрипты.
Теперь, по моему мнению, плюсы
* Файлы разметки вообще не содержат ни какого кода. Конечно в шаблоне нужна некая логика, я пока не продумал как это будет, возможно чтото вроде тригеров или ValueConverter-ов в WPF. Но конструкций типо include или вызов функций, не будет - изначально задумано концепцией.
* Четко видна структура шаблона
* главный, я считаю плюс и мой любимый. Элементы управления, которые кстати избавляют от таких конструкций в шаблоне как for, while. Естествнно есть возможность делать свои элементы управления, и прикручивать их к системе.
* на выходе получаем чистый html документ без пробельных символов, коментариев, и прочей ненужной фигни.
* также имеется стек css и javascript, чтоб к странице небыло прикручено несколько одинаковых скриптов и стилей. Это позволяет каждому элементу и шаблону, прям внутри разметки, без опасений клеить скрипты и стили. Если шаблон на странице используется не один раз, то стиль или скрипт будет объявлен единажды.
* и конечно система кеширования.
Так вот. Кто дочитал до конца, тому я сочувствую ))) чтото может я упустил или корявенько написал, мне прастительно - у меня уже третий час ночи. Так что задавайте вопросы если чтото не ясно.
Спасибо всем прочитавшим и особенно оставившим свое мнение и советы...
PS Можно будет продолжать эту тему, может чтонить интересное слепим. Мастера и новички, подключайтесь кому интересно... (Добавление) Еще маленькое дополнение
еще можно сделать альтернативный синтаксис зарезервированных слов для любителей сокращений иподдержания стиля html
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
вопрос производительности
скольких юзеров будет достаточно чтоб сайт пал смертью храбрых???
Longi
Отправлено: 11 Октября, 2011 - 01:31:04
Новичок
Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
DlTA пишет:
вопрос производительности
скольких юзеров будет достаточно чтоб сайт пал смертью храбрых???
Зависит от сервака... в конечном итоге каждый шаблон в отдельности будет переведен в php скрипт, и сохранен в папочку кеша. И следующий раз перекешируется только при изменении исходного файла. Так что производительность будет такая же как у php скрипта.
DlTA
Отправлено: 11 Октября, 2011 - 01:40:27
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
так тогда это уже копмилируемый шаблон
хотя вообще не вижу улучшения в сторону удобства между
"<tpl:FormTemplate DataSources="{Bind Form}"/>"
и например
"<?=@$data['val']?>" (каким небудь)
DeepVarvar
Отправлено: 11 Октября, 2011 - 01:50:47
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Longi пишет:
Конечно в шаблоне нужна некая логика, я пока не продумал как это будет, возможно чтото вроде тригеров или ValueConverter-ов в WPF.
Не придираюсь к тому, что еще не придумали. Хочу указать лишь на то, что идёте вы в сторону придумывания нового синтаксиса для шаблонов.
Самое важное для интерпретируемого языка, это - скорость выполнения и уменьшение ресурсов, которые он будет в это время пожирать.
Понятно, что за удобство придется платить..
Идея очень хороша. Делайте конечно.
Я же наоборот отказался от шаблонизатора как такового. Именно для скорости.
Если не вникать в детали, то так:
В реалиях оно еще умеет автоматически "рожать" пагинацию.
Выводить любой запрошенный блок (не макрос!!!) (с нужными параметрами: лимит, сортировка) прямо в шаблоне.
Тесно общается с буфером, т.е. не вызывает лишний раз метод какого либо класса, ну того же меню, которое по идее ломится в базу и т.д...
Если что-то ранее вызывалось - берем данные из буфера.
Страница со всеми списками, пагинаторами, меню, блоков новостей,
аутенфикацией юзера и пр.. обходится мне в 3-10 запросов к базе..
Сами шаблоны же просто хтмл-странички с пхп-вставками с обычным синтаксисом.
Всеравно шаблоны делаются для всех вариантов отображения юзеру.
В вашем случае придется шаблоны эти парсить, парсить, парсить...
Я - за скорость.
Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
DlTA пишет:
так тогда это уже копмилируемый шаблон
хотя вообще не вижу улучшения в сторону удобства между
"<tpl:FormTemplate DataSources="{Bind Form}"/>"
и например
"<?=@$data['val']?>" (каким небудь)
Вся идея заключается в том чтобы вообще запретить в файле шаблона подобные конструкции, ибо писать все разметкой.
в удобстве {Bind Form} и <?=@$data['val']?> не различаются, я щас именно так и делаю впринцепи. Но глаза это всетаки режет, особенно когда большой шаблон. И плюс хочу облегчить жинь версальшикам.
Удобство заключается в использовании элементов управления, и манипуляции с шаблонами.
И еще рез повторюсь, структуру документа сразу видно, если из моего первого поста уберете все коментарии будет видно.
DeepVarvar
Отправлено: 11 Октября, 2011 - 02:01:06
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DeepVarvar пишет:
Самое важное для интерпретируемого языка, это - скорость выполнения и уменьшение ресурсов, которые он будет в это время пожирать.
Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Цитата:
В вашем случае придется шаблоны эти парсить, парсить, парсить...
Я - за скорость.
Я конечно тоже за скорость, и буду стараться сделать систему шустрой. Ну как построю систему, буду проводить тесты и пробовать различные варианты.
А парсится каждый раз это не будет, только при первом вызове файла шаблона, после его изменения. После первого парсинга, это все переводится в php скрипт сжатый до немагу, сохраняется и при след вызовах просто этот скрипт инклудится.
Единственное пока как я думаю по времени уязвимое место, это постоянные сверки даты компиляции шаблона и последнего изменения исходного файла шаблона.
Либо сделать ручную компиляцию шаблона, то есть - исходник изменил, во фраймворке скрип запустил - шаблон скомпилировался. Но тут получается некое неудобство. Или сделать расширенные функции по компиляции шаблонов. Чтото типо режимов debug и relese.
Что вы думаете по этому поводу???
DlTA
Отправлено: 11 Октября, 2011 - 02:14:53
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Longi пишет:
Удобство заключается в использовании элементов управления, и манипуляции с шаблонами.
если можно то хотелось бы пример манипуляции, и использования. (Добавление)
Longi пишет:
ибо сделать ручную компиляцию шаблона, то есть - исходник изменил, во фраймворке скрип запустил - шаблон скомпилировался. Но тут получается некое неудобство. Или сделать расширенные функции по компиляции шаблонов. Чтото типо режимов debug и relese.
ребилд шаблона можно проводить (как вариант) либо раз в сутки, либо при вызове с флогом "debug"
тем самым отпадает необходимость сверять время создания скомпиленного шаблона, ну и всякие остальные тонкости
DeepVarvar
Отправлено: 11 Октября, 2011 - 02:34:36
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Фреймворки и так тяжелые... А вы еще "жирка" подкинете..
Компиляция шаблонов...
Ну да я сказал уже, что идея интересная..
Просто каждый идет своим путем.
Я в основном копаюсь в уже действующих сайтах и скажу что дерьма там мама не горюй..
Тех, кто работает реально чисто, кто к коду относится щепетильно - еденицы..
Остальные - быдлокодеры. Да и сам я не особо высокого полета,
вон, велики свои изобретаю..
Ну насмотрелся я на тыщу раз правленный код..
Что в фреймворках, что в чьих-то велосипедах..
Делайте свое дело - ничто за зря не будет - у вас опыт не малый, но и в вебе есть свои тонкости.
а вот список подобных элементом ListView, TabBox и короче куча всякой фигни...
Можно конечно просто этот большой кусок инклудить где надо, впринцепи скомпилированный шаблон почти так делать и будет, но все же я борюсь еще и за чистату в разметке, ато бывает начинаешь теряться где что находится...
Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011
Помог: 0 раз(а)
Цитата:
DiafanCMS
Очень даже может быть, точнее XSLT шаблон, но что в них не хорошо, если я не ошибаюсь, перед тем как шаблон запустить необходимо модель данных конвертировать в xmldocument а потом еще и преобразование шаблона, и все это на лету... Хотя надо проверить, покопать глубже. Может я на этом варианте и остановлюсь, но это уже завтро...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.