![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
Всех приветствую
![]() пишу шблонизатор... ![]() Но все-таки... Итак идея: ОЧЕНЬ простой синтаксис; минимальный функционал; возможность инклуда: а. Текста <!--some_text--> б. ПХП Скриптов <!!--some_php_file--> допустим, сначала, для простоты рассуждений, что шаблон формируется в два этапа: 1. текст заменяется на строки с помощью str_replace 2. а вот тут встает проблема: как инклудить код? придумал такой алгоритм: 1. записываем в $template то что получилось после 1-го подхода. 2. ищем все до первого <!!--(что-угодно)-->, выводим это 3. инклудим скрипт из первого <!!--(что-угодно)--> 4. удаляем из $template подстроку, которую уже вывели и первый тег <!!--(что-угодно)--> 5. возвращаемся к шагу 2. подозреваю, что можно все проще делать.... Жду советов, спасибо! Это сообщение отредактировал(а) VingradFan - 19.1.2009, 23:11 -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нужно, в принципе, расчитывать на компилируемый шаблонизатор, когда шаблон компилируется в более-менее простой PHP код. Если шаблонизатор некомпилируемый - когда-нибудь настанут тормоза, знаю по своей поделке
![]() С таким подходом к использованию, синтаксис можно наворачивать сколь угодно сложно - собственно время компиляции шаблона будет непринципиально... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
ksnk, спасибо за наводку на компилирующий шаблонизатор...
буду гуглить ![]() что-то я совсем забыл про функцию eval();!!! она ведь решает всю проблему и сводит код к двум строчкам ![]() -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
VingradFan, Для тестирования могу предложить в меру тяжёлую тестовую задачку - "вписать" шаблонный движок в "магазинную страничку ". Магазинная страничка - это:
-- страница вывода товара по категории. Для простоты - слева "деревянный" список категорий (категорий 50-100). Справа - таблица товаров. Снизу еще одна категория товаров (новинки... штуки 3-6). Товар - ассоциативный массив с картинкой, ценой и фиксированным набором атрибутов, некоторые из них удобно выводить выпадающим списком... -- Список товаров разношаблонный. Для каждого товара (даже и в одной категории) может использоваться разные шаблончики. Впрочем, это на потом ![]() -- Таблица товаров - раскрашена полосками - чёт-нечёт + выделяются цветом некоторые столбцы. Нужно разработать систему шаблонов, которую было бы несложно подменять для разных проектов. Чтобы при смене количества атрибутов "товара" не приходилось переделывать всю цепочку шаблонов. В принципе, для конкретики можно в любой e-магазин ткнуться... Оно там везде такое ![]() А так - задачка интересная. Разрабатывает логическое мышление. ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
ksnk, ну причем тут навороченный магазин
![]() я ведь делаю шаблонизатор для конкретной цели: небольшая hand-made CMS... т.ч. я думаю, eval здесь самое оптимальное решение.... PS я таки осознал, что для большого проекта нужен нативный PHP шаблонизатор ![]() -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
имхо, если есть варианты решения без eval(), даже с полным изменением логики работы, то надо ибегать её
|
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Угу, угу, знакомая история. ![]() Честно говоря, для небольшого проекта шаблонизатор, как таковой и не нужен. Нужно выделить все классы-функции, ответственные за формирование HTML'я в отдельный файл. обозвать его "шаблонизатором " или view-контролером по вкусу и наслаждаться жизнью... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
bars80080, она типо непроизводительна?
ksnk, ну раньше, когда я не слышал слова шаблонизатор у меня в шаблонах были для текстовых данных echo "somwthing"; а для подключения компонентов include (something); но потом я прочитал, что так некруто ![]() -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
VingradFan, Нужно уж определиться, это маленький проект, который по определению весь делается одним человеком, или большой проект, для которого специальный верстальщик делает специальные шаблоны.
Обычная, imho, практика работы с шаблонами - приложение формирует ассоциативный массив с данными и передает его шаблонизатору. Шаблонизатор уже сам вставляет нужные параметры в нужные места. Чего-нибудь такое:
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VingradFan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
пишется пока для себя, но хочется "чтоб все как у взрослых" ![]()
ну это понятно.... суть темы состоит в том, как передавать шаблонизатору куски кода PHP в виде файлов.... 1. вариант - eval(); 2. вариант - в первом посте.... пока идею иссякли ![]() -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
![]() приведи пример, где это понадобилось. Всяко можно задачку решить и без eval'а. eval - сильно проигрывает другим методам в скорости выполнения, так что лучше его избегать... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
VingradFan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
привожу пример шаблона
<!--menu--> <!--login_form--> <!--body--> надо заменить на php код, который формирует меню, форму логина, и тело страницы. -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
причём здесь пхп-код? наверно в браузер ты всё же отправляешь целиком и полностью хтмл-разметку, без единого кусочка кода?
достаточно считать весь файл и заменить куски на соответствующие части:
где $title, $menu, $form данные из БД или файлов, с генеренные и скомпонованные на пхп в нужном виде |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
VingradFan, А можно было бы придумать как записать в шаблоне "заголовок" и описать LoginForm, Body и Menu в том-же файле. Это, типа, круто. Все шаблоны маленького приложения в одном файле. Ну в крайнем случае, можно в нескольких файлах, а имя "шаблона" брать из имени файла...
Если свести к моему примеру, все будет примерно так
И куда тут теперь нужно вставить какие-то PHP-шные файлы? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
VingradFan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 477 Регистрация: 30.1.2006 Где: Москва Репутация: нет Всего: 3 |
bars80080, ksnk, спасибо за мысли, буду перечитывать и обдумывать
![]() bars80080, например, на место <!--news--> надо подгрузить компонент news.php
очень просто и логично звучит ![]() тоесть надо каким-то образом результат работы этого скрипта записать в текстовую переменную и заменить ею <!--news--> ? похоже надо будет менять тогда принцип работы компонентов. ![]() Это сообщение отредактировал(а) VingradFan - 21.1.2009, 00:46 -------------------- Когда-нибудь я стану богатым и куплю себе столько Ролтонов, сколько захочу... |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |