Технология VITRAGE
Один из витражей города Иркутска
О модуле
· Что такое VITRAGE
· История модуля
· Загрузить модуль
· Документация целиком
· Загрузить документацию в формате MS Word
· Слово автора
· English version
 
Теория
· Компиляция и установка
· Идеология VITRAGE
· Оптимизация HTML
· Создание виртуальных хостов
· Создание структуры доменов
· Ваш собственный язык гипертекстовой разметки
 
Практика
· Немного о стилях парсинга
· Примеры использования
· Работающие сайты
· Хостинги
· Вопросы и ответы
· Задать вопрос
· E-mail
 
· Введение. Что такое VITRAGE

VITRAGE (читается "витрАж") - это модуль расширения популярного веб-сервера Apache, предназначенный для решения нескольких задач, основные из которых - это:

1) Расширение языка разметки HTML. Разработчик, использующий VITRAGE, получает возможность вводить и описывать собственные тэги, их атрибуты, значения по умолчанию и т.д. В распоряжение HTML-верстальщика поступают такие возможности VITRAGE, как условия обработки тэгов, циклы, встроенные полезные переменные и тэги, несколько вариантов присоединения "внешних" файлов и скриптов, а также "язык в языке" - встроенный язык числовых и строковых операций Primitive.

2) Оптимизация "на лету" передаваемого пользователю HTML-кода посредством удаления избыточных пробелов и пустых строк, неоправданно увеличивающих загружаемые пользователем страницы: каждая страница, обработанная модулем, содержит только действительно необходимую информацию.

3) Манипуляция виртуальными хостами (доменами).

Прежде всего, использование модуля VITRAGE позволяет сократить время разработки и обновления сайтов. При помощи VITRAGE можно легко описать, например, "шапку" сайта и использовать одно описание на всех его страницах, можно один раз описать дизайн страницы, а затем заботиться лишь об информационном наполнении и т.п. С этой точки зрения VITRAGE представляет собой очень легкий язык "скриптования" с условиями, циклами, переменными.

Используя VITRAGE, веб-разработчик получает в свои руки инструмент, который сократит время, затрачиваемое на HTML-форматирование страниц (логическую разметку) и позволит писать HTML-документы на практически обычном, "естественном" языке.

Пользователи же веб-сайтов, работающих под управлением VITRAGE, избавляются от необходимости скачивать страницы, перегруженные лишними пробелами и пустыми строками.

Для создания первичного образа данного средства веб-разработки автор VITRAGE рекомендует рассматривать его как чрезвычайно расширенную технологию SSI (Server Side Includes), известную многим. В отличие от SSI, однако, VITRAGE гораздо более мощен и "естественен" для HTML-верстки.

Название VITRAGE произошло от названия набора PHP-скриптов, позволявших быстро реализовывать "многоблочную" информационную верстку, напоминавшую ее автору традиционные витражи. В какой-то момент автор решил, что PHP-скрипты для описания блоков HTML не слишком универсальны и непозволительно громоздки, и начал работу над модулем расширения для самого веб-сервера, оставив впоследствии первоначальное название.

Стек-ориентрированный язык Primitive, названный так из-за ярко выраженной и ограниченной сферы применения, изначально был частью текстового редактора The Textra Edit (for Windows), который разрабатывал (исключительно в познавательных и самообразовательных целях) все тот же автор. В VITRAGE для обеспечения возможности простой обработки числовых и строковых данных вошла еще более упрощенная версия Primitive.
 

· Последняя версия VITRAGE: 1.24

 
Модуль предназначен для работы с Apache 1.3.x. После загрузки вам необходимо скомпилировать и установить модуль.
 
Внимание! В версии 1.24 и во всех последующих версиях модуля операции записи файлов по умолчанию запрещены. Чтобы разрешить операции записи файлов для всего сервера, для виртуальных хостов или для отдельных каталогов, в конфигурационном файле Apache httpd.conf необходимо использовать ключевое слово VGFileOperations со значением "Full": "VGFileOperations Full".
 
Другие значения ключевого слова VGFileOperations: "On" (по умолчанию) - разрешены только операции чтения файлов, "Off" - запрещены любые операции с файлами, кроме <%include%>. Это ключевое слово нельзя употреблять в файлах .htaccess.
 

· Документация в формате MS Word
· Кнопки
Powered by VITRAGE
Powered by VITRAGE

Вы также можете прислать нам свою кнопку для модуля VITRAGE.
 

Исходный код
· VHTML-код этой страницы (в новом окне)
· VHTML-код файла vitrage (в новом окне)
 
· История модуля VITRAGE

· 1.24 [04.01.05] - удален параметр компиляции VG_SAFE; преобразование переменных окружения в глобальные переменные (с префиксом env%); префикс cookie% у преобразованных из cookies глобальных переменных; оператор Primitive if; тэг <%unescape%>; устранена неточность, которая при определенных условиях приводила к segmentation fault дочерних процессов веб-сервера; ключевое слово VGFileOperations для ограничения файловых операций (On - разрешены только операции чтения, Off - запрещено все, кроме <%include%>, Full - разрешено все); ключевые слова VGMultiSitePath, VGMultiDomainLevel, VGBaseDomain, VGBaseSubLevel теперь допустимы только в *.conf сервера; это промежуточная версия перед выпуском версий 1.25+
· 1.25 [??.04.04] - произведена некоторая оптимизация работы модуля с памятью; переменные %dir% (каталог из %uri%), %port%; автоматическая генерация абсолютного адреса при переадресации (с использованием символа '}' вместо '>' в качестве первого символа VHTML-файла); это тестовая непубличная версия
· 1.23 [18.11.03] - в некоторых местах символ '\n' заменен на явный код '\012' (изменение скорее "косметическое", чем практическое)
· 1.22.3 [17.10.03] - оператор Primitive swop (= swap)
· 1.22.2 [13.10.03] - значение параметров VGStripSpaces и VGStripLines теперь по умолчанию "Off" (оптимизация HTML по умолчанию не производится)
· 1.22 [11.08.03] - переменная %localip%, содержащая IP-адрес сервера
· 1.21 [14.11.02] - переменные %true% и %false%; тэги <%empty[d]%>, <%true[d]%>, <%false[d]%> для логических операций со строками
· 1.20 [11.10.02] - атрибут %shuffle% для случайной перестановки значений переменных
· 1.19 [31.08.02] - новые операторы Primitive для работы со строками
· 1.18 [12.08.02] - возможность указывания атрибутов, не имеющих значения (примут значение пустой строки)
· 1.17 [30.07.02] - обработка cookies (преобразование в глобальные переменные)
· 1.16 [24.07.02] - тэг <%drop[d]%> для удаления одной копии глобальной переменной; тэг <%read[ln][d]%> для чтения текстовых файлов; тэг <%stat%[d]> для получения информации о файлах
· 1.15 [19.06.02] - несколько новых тэгов для работы с файлами (запись)
· 1.12 [11.06.02] - небольшое изменение в vitrage_normalize(...)
· 1.11 [06.06.02] - тэг <%break%> для немедленного окончания обработки текущего тэга или строки файла
· 1.10c2 [17.05.02] - незначительные изменения
· 1.10c [13.05.02] - расширенное управление зависимостью данных от регистра на этапе компиляции
· 1.10 [11.05.02] - атрибуты и переменные отныне регистронезависимы
· 1.05 [26.04.02] - незначительные изменения в vitrage_uri2filename(...) (принудительное преобразование доменных имен в lowercase)
· 1.04 [09.04.02] - незначительно изменен синтаксис Primitive
· 1.03 [08.04.02] - тэг <%exit%> для немедленного и полного окончания парсинга
· 1.02 [26.03.02] - переменные %authuser% и %remoteip%
· 1.01 [21.01.02] - тэг <%return%> для немедленного окончания парсинга текущего файла
· 1.00 [30.12.01] - не замечено никаких ошибок в течение многих месяцев - отличный повод выпустить первый "глобальный релиз" под Новый год (2002); небольшие изменения коснулись функции vitrage_add_htmlvar(...); улучшено (сделано более полным и соответствующим стандартам) rawencode

· Второй этап развития

· 0.12.2 [16.09.01] - тэг <%interpret%> для парсинга значений локальных переменных; небольшие изменения в vitrage_parse_str(...)
· 0.12 [13.09.01] - изменен принцип перенаправления на другой адрес; удалены функция vitrage_redirect(...) и настройка VG_REDIRECTOR
· 0.11.02 [09.09.01] - параметр %tag% в локальных параметрах (атрибутах) тэгов
· 0.11 [29.08.01] - реализация работы со стеком; полная реализация подмножества директив Magicians Primitive
· 0.11.alpha [28.08.01] - неоконченная реализация работы со стеком
· 0.10.04p [26.08.01] - еще немного дополнений в vitrage_primitive(...)
· 0.10.04 [23.08.01] - ключевое слово VGBaseSubLevel
· 0.10.03p [19.08.01] - небольшие изменения в рамках подготовки к реализации обработки Magicians Primitive
· 0.10.03 [17.08.01] - незначительное изменение в обработке <%inc[d]%> и <%dec[d]%>
· 0.10.02 [06.08.01] - глобальная переменная %quot%
· 0.10 [03.08.01] - совершенно новый алгоритм ("стиль") парсинга: не построчный, а полностью последовательный разбор; много новых тэгов; новые переменные; ключевое слово VGParseOldStyle (значение по умолчанию - Off); новые функции; очень много изменений в старых функциях

· Первый этап развития (выборочно)

· 0.07.03 [02.08.01] - тэг <%tag%> для вывода тэгов
· 0.07 [30.07.01] - атрибут %btimes% для тэгов; тэг <%copy[d]%>
· 0.06 [16.07.01] - возможно использование переменных в значениях атрибутов тэгов по умолчанию
· 0.05 [20.06.01] - ключевое слово VGMultiSitePath
· 0.04 [05.05.01] - изменено действие <%unsetd%> (проверяется условие)
· 0.03 [07.04.01] - расширение ключевого слова VGConfigFile: возможно "расширение" и "перекрытие" (VGConfigFileOverride) конфигурации для каталогов и подкаталогов
· 0.02 [20.03.01] - второй релиз; возможность отключения проверки на рекурсивные включения (как в VHTML, так и при компиляции)
· 0.01 [11.03.01] - первый релиз; возможность работы с переменными и "составлять" выдаваемый пользователю HTML из нескольких разных файлов
· 0.01.alpha [??.02.01] - первая версия

· Задать вопрос

Вы можете задать любой вопрос (об установке, использовании и т.д.) автору модуля VITRAGE по адресу elk@elk.ru.

Обычно ни одно электронное письмо не остается без ответа. Помните: чем конкретнее будет ваш вопрос, тем быстрее вы получите на него ответ.

Пожалуйста, проверьте предварительно, не дан ли уже ответ на ваш вопрос в разделе "Вопросы и ответы".
 

· Последние вопросы

Вопрос. Я обновил версию модуля VITRAGE, после чего у меня перестали работать операции записи файлов. Почему? Что делать?

Ответ [04.01.05]. С версии 1.24 из соображений безопасности был введен запрет на запись файлов по умолчанию. Дело в том, что ранее пользователь модуля мог записать файл в любое место файловой системы, куда разрешен доступ на запись для веб-сервера (например, в каталог /tmp). Это могло вызвать определенные проблемы на недостаточно грамотно настроенных серверах. Чтобы разрешить операции записи файлов для всего сервера, для виртуальных хостов или для отдельных каталогов, в конфигурационном файле Apache httpd.conf необходимо использовать ключевое слово VGFileOperations со значением "Full": "VGFileOperations Full".

Вопрос. Данный сайт очень редко обновляется. Это значит, что технология мертва?

Ответ [19.02.03, 04.01.05]. Это значит, что сама технология стабильна, а обновления для некоторых разделов сайта по-прежнему находятся в стадии подготовки. Версия 1.21 (с 11.08.03 - 1.22.x, с 18.11.03 - 1.23.x, с 04.01.05 - 1.24.x, делаются только несущественные дополнения) на самом деле очень хорошо сбалансирована как с точки зрения стабильной работы, так и с точки зрения функциональной полноты.

Вопрос. Может ли тэг из своего описания вызывать сам себя?

Ответ [10.11.02]. По умолчанию в модуле VITRAGE подобные рекурсивные вызовы запрещены. Существует два способа разрешить такие вызовы. Во-первых, перед компиляцией можно закомментировать в исходном тексте модуля строку "#define VG_RECURSE_CHECK", при этом рекурсивные вызовы окажутся разрешенными по умолчанию. Во-вторых, при вызове тэга можно воспользоваться специальными атрибутами %recurse% и %norecurse%:

<mytag %recurse%="1">
<mytag %norecurse%="">

При этом в описании тэга обязательно следует предусмотреть выход из рекурсивного цикла, воспользовавшись одним из атрибутов условия - %parse% или %noparse%.

Вопрос. Какие описания нужно сделать в конфигурационном файле vitrage, чтобы после парсинга VHTML все комментарии вида "<!-- Комментарий -->" не отображались?

Ответ [06.11.02]. Нужно описать тэг <!-->:

<!--></!-->

Поскольку описание тэга пусто, все комментарии при парсинге будут логично опущены. Отметим, что это произойдет только в том случае, если между "<!--" и началом комментария есть хотя бы один пробел. В противном случае VITRAGE воспримет комментарий вида "<!--Комментарий -->" как совершенно другой тэг (тэг <!--Комментарий>), который надо описывать дополнительно.

Вопрос. Я захотел описать собственные тэги для комментариев <rem> и </rem> таким образом, чтобы конструкция "<rem>Комментарий</rem>" преобразовывалась модулем в "<!-- Комментарий -->". Пытаюсь сделать это так:

<rem><!--$%space%$</rem>
</rem>$%space%$--><//rem>

Не работает. Вернее, как-то работает, но явно не так, как мне нужно. Что делать?

Ответ [06.11.02]. Все очень просто: VITRAGE в большинстве случаев весьма чувствителен к вложенности знаков "<" и ">", а в приведенном описании эта вложенность явно нарушена. Вместо "<!--" и "-->" следует написать "$%lt%$!--" и "--$%gt%$" соответственно, и проблема разрешится.

· Copyrights

· © Siberian Web
· © Денис Соловьев

VITRAGE - это freeware. Некоммерческое распространение разрешено без ограничений, модификация разрешена при условии упоминания оригинального наименования VITRAGE и уведомлении автора об изменениях.
 

· Заключение

Автор модуля VITRAGE искренне надеется, что созданная им технология будет полезна многим веб-разработчикам и HTML-верстальщикам.

Если вы владеете языком программирования C, вы без особого труда сможете изменять исходные тексты модуля по своему усмотрению. Например, вам будут доступны значения параметров модуля по умолчанию, наименования встроенных тэгов и переменных, установка зависимости данных (имен тэгов и переменных, а также операторов Primitive) от регистра, режим "отладки" и т.п. Если вы вносите в текст модуля значительные принципиальные изменения, не сочтите за труд переслать вашу версию VITRAGE автору (желательно с легкими для чтения и понимания комментариями).

Самая последняя авторская версия модуля в виде исходных текстов на языке C всегда доступна на сайте vitrage.sibweb.ru, а с автором модуля VITRAGE можно связаться по электронной почте: elk@elk.ru. Вопросы, пожелания, предложения и замечания только приветствуются.