Phoinix:
Интересно услышать мнение других программистов по поводу реализации решения.
ИМХО не очень удобно верстать:
Зачем делать блоки такими неудобными? Куча комментариев с какими-то циферками... Разве нельзя сделать хотябы так:
{block:some_name}...{/block:some_name}
Почему мы поставили комментарии напротив каждой строки, а не, скажем, просто метки начала и конца блока? Да потому, что в случае вывода строки списка номеров страниц, нам требуется «выкусить» часть блока, а потом, после обработки, вставить обратно, нам бы пришлось этот блок разбивать не на 3 части а на 4 (начало блока, текущая страница, ссылка на другую страницу, конец блока).
2. Обработка шаблона это отдельный разговор... Она должна проходить абстрактно, а у тебя всё сделано под конкретные значения
Phoinix:
IMHO если обработку делать абстрактно, то раздувается код, и потом я использую шаблоны под конкретные задачи, соответственно я и внедряю в него конкретные значения...
Phoinix:
не на 3 части а на 4
Phoinix:
Вся загвоздка из-за блоков вложенных в блоки...
%col1%
%col2%
# это шаблон с блоком
$a = \'Begin template
I am %name% %surname%
end template\';
$_ = $a;
# получаем текст блока
$_ =~ /(.+?)/s;
# в этой переменной будет текст блока
$block_code = $1;
# а сюда будем записывать результирующий ХТМЛ
$block_html = \'\';
# парсинг блока
$_ = $block_code;
$_ =~ s/%name%/Maxim/s;
$_ =~ s/%surname%/Matyukhin/s;
$block_html .= $_;
$_ = $block_code;
$_ =~ s/%name%/Vladimir/s;
$_ =~ s/%surname%/Putin/s;
$block_html .= $_;
# заменяем блок на его результирующий HTML-код
$a =~s/(.+?)/$block_html/s;
print $a;
Код будет как раз таки меньше и сможет обрабатывать все шаблоны, а тебе приходится каждый раз заново писать новый обработчик, это не логично + частично теряется смысл использования шаблонов
%col1% | %col2% |
Phoinix:
Ну вообщем-то подобный обработчик не подразумевается как отдельный модуль, а как дополнение к существующим скриптам
Phoinix:Ну и что? Ты же сам написал как получится???
маркировки начала и конца блока в разных ячейках массива и одним регулярным выражением забрать весь блок не получится...
Если у тебя сделано не рационально это не значит, что так и подразумевается делать
А ты сделай неограниченую вложеность и не будет ни какой загвоздки.
Phoinix:
Данная обработка предполагается для конкретных задач следовательно универсальность кода ни к чему, универсальность принципа обработки IMHO присутствует;
Phoinix:
2. По поводу выделения блоков HTML кода - все зависит от реализации загрузки файлов:
Phoinix:
а. если файл выгружается в массив, то IMHO мой способ выделения блоков наиболее рационален;
Phoinix:
3. По поводу выделения вложенных блоков, честно говоря, если идти по способу 2.б., то определить алгоритм что-то не получается...
Рационально было бы написать один единственный обработчик который сможет обрабатывать любые шаблоны.
но максимально прост в реализации
$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; $i<5; $i++) {
$tmpl->set_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%
кнопка редактирования
кнопка удаления
через несколько проэктов тебе надоест по 10 раз все это переписывать и ты задумаешься об оформлении шаблонизатора в виде модуля
ничего сложного, просто вложенные блоки (весь код приводить не буду, просто блоки покажу):
ИМХО все твои проблемы именно из-за неправильной организации блоков
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; $i<5; $i++) {
$tmpl->set_var("number", $i);
$tmpl->append("block_handle","block_name");
}
print $tmpl->parse("handle");
довольно не удобен
А всё что ты перечислил без проблем все делают с помощью одного единственного обработчика шаблонов
ты просто что то не понимаешь
Это просто альтернатива не более того.а ты изучал существующие решения на перл ? Хотя бы тот же
Нет там как раз вложенных блоков нет, просто сборка списка производится из шести блоков...ну и... Что проще/легче/удобнее - обработать 2 блока (но вложенных) или 6 (но простых) ? :)
Насколько я понимаю из обсуждения, мое решение подходит для разработки маленьких проектов.а чем большой проэкт отличается от маленького ? Если количеством файлов, то в случае большого проэкта тебе просто этот код нужно будет писать в большем количестве файлов.