parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Специфика

AleXp 08.11.2005 00:06

Тут вообще-то надо объяснять в контексте всей моей системы, ну да попробую.

Метод, которым я подключаю шаблоны (^include[path_to_template_file.tpl] - файтически это ^file::load[]), предназначен для подключения именно шаблонов - Парсер3 его обрабатывает несколько иначе чем подключаемые через ^use[] классы и операторы. В частности - не столь критично проверяет на синтаксис. Страницы у меня собираются долго, из разных мест. После сбора всей страницы (в строку) я могу еще по всякому обрабатывать её перед выводом. А вот ^use[] "вылавливает" в подключаемом файле только операторы и всключает их в пространство функций всей программы.

Приведу пример верхней части шаблона сайта (сокращенный):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ru">
<head>
<title>OPENSEA.RU ::: Интернет&ndash^;витрина магазина ОТКРЫТОЕ МОРЕ</title>
<meta http-equiv="Content-Type" content="text/html^; charset=$SITE_CHARSET">
<meta http-equiv="Content-Language" content="ru">
<link href="/styles.css" type="text/css" rel="stylesheet">
</head>

<body>
<!-- No search start -->
# Начало таблицы "Рында, фирменный знак, черепаха, водолазики"
<div style="left: 11%^; position: absolute^; top: 0%">
..........
###################################################################################################
# Вывод левого интерактивного меню навигации
^APPLICATION.GetMenuHtmlEx[left;true]
..........
<td vAlign="top" width="100%">
<div class="content">
<!-- No search end -->
....
и т.д.
В нем нет ни одного определения операторов, но есть вызовы этих операторов и методов класса. Если попытаться подключить этот шаблон при помощи ^use[], то он вообще ничего не включит в код :(Для этого мне пришлось бы весь шаблон озаглавить каким-либо оператором:
@METHOD_VIEW_PAGE[]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ru">
<head>
<title>OPENSEA.RU ::: Интернет&ndash^;витрина магазина ОТКРЫТОЕ МОРЕ</title>
<meta http-equiv="Content-Type" content="text/html^; charset=$SITE_CHARSET">
........
А теперь представьте, что сам "главный" шаблон может включать в себя десяток других, подключаемых динамически, в зависимости от разных внешних условий (параметр запроса страницы, фаза луны в момент вызова и т.п.). И что? Опять ^use[] и "динамические имена методов? Лучше бы я помер вчера :) Куда как проще использовать ^file::load[] или, что в общем-то тоже самое, ^include[].

Мелкие приятности подобного подхода:
- шаблоны может писать человек не знающий Парсер3 (если есть справочник по API системы)
- проще бороться с логическими ошибками - все операторы вынесены из шаблонов и задание их там приводит к ошибке. Следствие: вы никогда не ошибетесь в логической части системы "натягивая" на ней новый скин
- еще много всяких плюсов, но это уже надо предметно на примере системы разбирать.

ЗЫ. Сейчас придет Михаил и отправит меня в Бабруйск, изучать XML/XSL :)