Powered by Parser 3

Язык скриптования сайтов

Создание сайтов - медленная ручная работа. Для облегчения кодирования 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.

Михаил АСТАПЧИК

Версия для печатиВерсия для печати

Номер: 

06 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя LMD
В результате, всё равно велосипед изобрели. Почему этим изобретателям никто не рассказал например про Smarty template engine, ведь помощнее и поэлегантнее будет, и синтаксис не такой идиотский %)
Аватар пользователя Fedor78
>LMD

Smarty -элегантен, но тяжеловесный. Давно многие используют FastTemplates, а иногда и самописные, хотя есть решения и более мощные чем смарти