Язык скриптования сайтов
Создание сайтов - медленная ручная работа. Для облегчения кодирования html-документов в недрах российской студии Артемия Лебедева изобретено средство для автоматизации разработки веб-проектов под названием Parser. Совсем недавно вышла уже третья версия этого языка скриптования сайтов.
Узкая специализация
Parser (www.parser.ru) является языком программирования, существенно упрощающим и систематизирующим создание веб-сайтов. В html-страницы внедряются специальные инструкции, обрабатываемые программным модулем, прежде чем пользователь увидит страницу в браузере. При использовании Parser автор сайта получает в своё распоряжения переменные, циклы, условия и т.д., всё то, чего не достаёт в стандартном html.
По правде говоря, поначалу кажется, что в студии Артемия Лебедева "изобрели велосипед": PHP - это ведь тоже язык программирования, который тоже внедряется в html-код и выполняется перед отправкой браузеру. Но разница между Parser и PHP существует, и эта разница практическая. Если PHP давно уже претендует на статус универсального скриптового языка, то Parser - это узкоспециализированное средство, которое предназначено только для сайтостроительства и ни для чего больше.
Такая узкоспециализированность есть благо уже лишь потому, что документации для изучения этого средства нужно меньше, чем для изучения того же PHP. А это при нынешнем постоянном дефиците времени однозначно радует. Не нужно забивать голову вещами, которые при практической разработке вряд ли понадобятся.
Hello, Parser!
Первое знакомство с языком программирования принято начинать с простого примера. Не будем отступать от этой прекрасной традиции, но и просто учебный экспонат без практического применения нам не нужен. Возьмём в качестве практической задачи создание динамического меню сайта. Это весьма распространённая задача. В случае статических html-страничек при любом добавлении-удалении страницы нужно вручную переписывать навигационное меню в каждом html-файле. А это не есть научно-технический прогресс. При помощи Parser мы сейчас автоматизируем эту рутину.
Предположим, наш сайт состоит из странички приветствия и странички прощания с пользователем. Для начала в корневом каталоге сайта создадим файл автоматизации auto.p, в котором напишем следующий код:
@main_menu[] <ol> <li> <a href="hello.html>Hello, world!</a> <li><a href="bye.html>Bye, world!</a> </ol>
Сейчас мы написали функцию или, говоря объектно-ориентированным языком, метод. Символ @ (собака) означает, что мы хотим описать некоторый блок, которым воспользуемся в дальнейшем. Следующее слово означает название функции: menu. В квадратных скобках могут быть параметры метода. Фигурные скобки для тела метода в Parser не используются, и метод определяется до следующей "собаки" или конца файла.
В нашем примере функция просто выведет html-код меню и всё, достаточно в html-страницах вызвать в нужном месте наш метод через символ вызова "^":
^main_menu[]
Теперь для изменения меню на всех страницах достаточно изменять только файл auto.p.
Проще говоря, всё это напоминает конструктор "Лего". В файле auto.p создаём блоки-кирпичики, а потом из этих кирпичиков собираем наш сайт.
Конечно же, синтаксис Parser довольно сильно отличается от того же PHP. Например, присвоение значения переменной происходит через квадратные скобки:
$var[значение]
Или ещё пример, условный оператор if употребляется без else:
if(условие){если "истина"}{если "ложь"}
Но к синтаксису быстро привыкаешь, и я даже нахожу его довольно удобным.
Объектное ориентирование
Parser является объектно-ориентированным языком. Это значит, что необходимым теоретическим минимумом для полного счастья при освоении Parser является знание про классы, объекты, параметры, методы.
В Parser уже реализованы классы таких типов, как строка, картинка, таблица, cookie, дата, файл, формы ввода, хэши, почта. Вот для примера модифицируем пример с динамическим меню с использованием класса таблицы:
@main_menu[] $sections[^table::create [{url name hello.html Hello,world! Bye.html Bye, world! }] <ol> ^sections.menu{ <li> <a href="$sections.url"> $sections.name</a> } </ol>
Сначала создаем объект класса таблица $sections и инициализируем его через формат tab-delimited, то есть столбцы разделяются знаком табуляции, а строки - переводом каретки. После этого вызываем метод класса таблица menu, который автоматически переберёт строки данной таблицы и подставит нужные параметры. Не стоит здесь обращать внимание на некоторую громоздкость кода. Данную таблицу вполне можно было бы вынести в отдельный файл, и этот пример выглядел бы тогда более изящно.
Объектный подход гораздо более удобен при работе с табличными данными и, особенно, с древовидными структурами данных XML. Parser через расширения поддерживает прозрачную работу с базами данных MySQL, Oracle, PgSQL, а также с любой СУБД через драйверы ODBC (в том числе. MS SQL, MS Access). Что же касается XML, то класс XDOC обеспечивает считывание файлов в XML-формате и запись в XML и HTML, а также XSLT-трансформацию.
Одним словом, в Parser с классами всё классно.
Установка
Несколько слов об эксплуатации и администрировании этого языка скриптования html-страниц.
Parser 3 доступен в нескольких вариантах: CGI-скрипт, модуль к веб-серверу Apache 1.3 и ISAPI расширение веб-сервера Microsoft Internet Information Server 4.0 или новее.
Я испытывал самый простой способ через CGI-скрипт. То есть, копируем заранее скомпилированный модуль Parser в локальный каталог сайта для CGI-скриптов. И прописываем в файл .htaccess вашего сайта следующие блоки:
# назначение обработчиком .html страниц AddHandler parser3-handler html Action parser3-handler /cgi-bin/parser3 # запрет на доступ к .p файлам, в основном, к auto.p <Files ~ "\.p$"> Order allow,deny Deny from all </Files>
Есть и некоторые проблемы. В отличие от PHP, пакеты которого существуют не только для всех платформ, но и для любого дистрибутива Linux, Parser не так распространён, и в большинстве случаев модуль придётся собирать из исходников. А это давно уже не модно. У меня, например, 64-битную версию не получилось собрать.
Ещё одним важным аспектом эксплуатации исполняемого кода является безопасность. Хакеры не дремлют, и в любом скрипте они будут искать дыры и бреши. Поэтому, установив на свой сайт этот Parser, хотелось бы спокойно спать по ночам, не опасаясь, что злохакер задефейсит главную страницу вашего супер-сайта про кошек. Но на данный момент разработчики студии Артемия Лебедева активно поддерживают проект и оперативно выкладывают обновлённые версии.
Ну и что касается распространения и лицензирования, то данный продукт распространяется по лицензии GPL.
Михаил АСТАПЧИК
Комментарии
Smarty -элегантен, но тяжеловесный. Давно многие используют FastTemplates, а иногда и самописные, хотя есть решения и более мощные чем смарти