Программирование > Теория, алгоритмы и стандарты
Работа с шаблонами
Phoinix:
Tronyx
--- Цитировать ---Рационально было бы написать один единственный обработчик который сможет обрабатывать любые шаблоны.
--- Конец цитаты ---
Рационально писать один единственный обработчик для обработки стандартных функций, например UBB-код, но как написать универсальный обработчик который выводит:
- статичные страницы (информеры) последних новостей в новостийном скрипте;
- динамичную страницу с выводом новостей по дням, месяцам, годам в новостийном скрипте;
- динамичный список категорий доски объявлений в скрипте доски объявлений;
- постраничный динамичный список объявлений определенной категории в скрипте доски объявлений;
- статичный список категорий статей в скрипте статей;
- динамичный список статей определенной категории в скрипте статей;
- статичные страницы статей в скрипте статей;
и т.д.
Все эти страницы генерятся либо динамично отображаются с использованием шаблонов разными скриптами, у каждого скрипта свое количество переменных которые вставляются в шаблоны...
Да, такие переменные как UBB-код будут одинаковы во всех скриптах, но я продразумеваю не это решение...
Написание универсального обработчика приведет как минимум в ограничении использования некоторых возможностей в сриптах при обработке шаблонов, т.к. мне прийдется довольствоваться только установленными функциями или дописывать новые, что приведет, опять же, к раздуванию скрипта... Но хорошо, если мы разобрались с нарезкой, то со вставкой уже готового кода в шаблон у нас опять возникают проблемы: как например произвести нарезку и вывод страницы подобной этой?
http://www.pyaticom.ru/test/statica.htm
6 различных строк которые выводятся так как нужно... а это шаблон:
http://www.pyaticom.ru/test/stat_viw.htm
Такие переменные как: %main_url%, %mod%, %user%, %pass% и другие я обрабатываю отдельным обработчиком т.к. эти переменные используются по-умолчанию во свех скриптах, но что делать с блоками выделенными ? Да я могу их вырезать в отдельном скрипте, но я уже не смогу их в нем же обработать т.к. дофига переменных своих да и принцип обработки блоков несколько иной... а потом самое главное куда я буду обработанные блоки вставлять, потому что все 6 строк после обработки становятся одним блоком и вставляются соответсвенно вместо , но это в данном случае, а когда конечный блок собирается из другого количества блоков и по другому принципу как быть тогда?
Поэтому может просто я неясно выразил мысль своей статьей:
Я не показываю в ней как обрабатывать стандартные выражения (пример UBB-код), а показываю как производить сложную обработку шаблона адаптированную к конкретным скриптам...
Хотя я и не отрицаю возможность существования других вариантв решений
P.S. %main_url% я заменил, ибо картинки и стили не загружаются...
Phoinix:
Tronyx
--- Цитировать ---но максимально прост в реализации
--- Конец цитаты ---
Не это ли главное... максимально просто реализовать и не стрелять из пушки по воробьям... :)
Макс:
Phoinix
а почему ты файл в массив а не переменную читаешь ? (потому что писать меньше ? :))
ИМХО это все лучше оформит в виде модуля. Код типа
--- Код: ---
$tmpl = Template->new("./template/dir/);
$tmpl->set_file("template.html",\'handle");
$tmpl->set_var("title", "My Hompage");
$tmpl->set_block("handle", "block_handle", "block_name");
for($i=0; $iset_var("number", $i);
$tmpl->append("block_handle","block_name");
}
print $tmpl->parse("handle");
--- Конец кода ---
выглядит компактнее, красивее и читабельнее.
По поводу вложенных блоков.
Первое, что нужно понять, так это то, что блок - это просто "маленький" шаблон и ничем от основного шаблона не отличается. Он тоже может иметь свои метки и блоки.
Контроль за вложенными блоками ложится на программиста, который пишет скрипт (а не на того кто пишет шаблонный движок).
Наиболее просто (ИМХО) - указывать, где находится блок, который собираемся парсить - в самом документе или в каком-то блоке.
--- Цитировать ---Но IMHO все же проще адаптироваться под конкретные задачи...
--- Конец цитаты ---
через несколько проэктов тебе надоест по 10 раз все это переписывать и ты задумаешься об оформлении шаблонизатора в виде модуля.
--- Цитировать ---но как написать универсальный обработчик который выводит:
--- Конец цитаты ---
какая нам разница что он выводит. Шаблонизатору пофигу, выводить новости или корзину магазина. Ему лишь нужно задать шаблон или список шаблонов, указать значение меток, пропарсить блоки и выдать готовый документ.
--- Цитировать --- как например произвести нарезку и вывод страницы подобной этой?
http://www.pyaticom.ru/test/statica.htm
--- Конец цитаты ---
ничего сложного, просто вложенные блоки (весь код приводить не буду, просто блоки покажу):
--- Код: ---
%main_category_name%
кнопка редактирования шаблона
кнопка удаления категории
%subsection_name%
кнопка редактирования
кнопка удаления
--- Конец кода ---
ИМХО все твои проблемы именно из-за неправильной организации блоков. Универсальный модуль сделать можно (хотя бы потому что на ПХП таких полно и некоторые из-них достаточно универсальны).
Phoinix:
Макс
--- Цитировать ---через несколько проэктов тебе надоест по 10 раз все это переписывать и ты задумаешься об оформлении шаблонизатора в виде модуля
--- Конец цитаты ---
Уже думаю... :), но по поводу переписывания всего, могу поспорить... скрипты переделывал раза по 2-3 но эту часть не трогал, не было надобности...
--- Цитировать ---ничего сложного, просто вложенные блоки (весь код приводить не буду, просто блоки покажу):
--- Конец цитаты ---
Нет там как раз вложенных блоков нет, просто сборка списка производится из шести блоков...
--- Цитировать ---ИМХО все твои проблемы именно из-за неправильной организации блоков
--- Конец цитаты ---
Чест слово, ну нету у меня проблем в этом. :) все просто замечательно работает. :)
Tronyx:
--- Цитировать ---Phoinix:
--- Цитировать ---но максимально прост в реализации
--- Конец цитаты ---
Не это ли главное... максимально просто реализовать и не стрелять из пушки по воробьям...
--- Конец цитаты ---
Ты забыл про другую часть моей фразы. ;)
--- Цитировать ---Tronyx:
довольно не удобен, но максимально прост в реализации.
--- Конец цитаты ---
--- Цитировать ---Phoinix:
Рационально писать один единственный обработчик для обработки стандартных функций, например UBB-код, но как написать универсальный обработчик который выводит:
--- Конец цитаты ---
Как сказал Макс
--- Цитировать ---Шаблонизатору пофигу, выводить новости или корзину магазина.
--- Конец цитаты ---
Ты должен научить его выводить всего одну вещь - данные. А всё что ты перечислил без проблем все делают с помощью одного единственного обработчика шаблонов, ты просто что то не понимаешь. Повнимательнее посмотри вот на этот код, если не поможет - посмотри ещё раз
--- Цитировать ---Макс:
$tmpl = Template->new("./template/dir/);
$tmpl->set_file("template.html",\'handle");
$tmpl->set_var("title", "My Hompage");
$tmpl->set_block("handle", "block_handle", "block_name");
for($i=0; $iset_var("number", $i);
$tmpl->append("block_handle","block_name");
}
print $tmpl->parse("handle");
--- Конец цитаты ---
Вот это и есть пример работы с "рациональным обработчиком шаблонов".
Навигация
Перейти к полной версии