VITRAGE: Примеры
· 1. "Распорки"
· 2. Изображения
· 3. "Колонтитулы"
· 4. Ссылки
· 5. Многоязычные сайты
· 6. Организация меню
· 7. Однотипные элементы
· 8. Формы и их обработка
· 9. Случайные операции
· 10. Циклы
· 11. "Ленты" данных
· 12. Внешние скрипты
· 13. Работа с файлами
· 14. "Бесконечный копирайт"
 
Практика
· Немного о стилях парсинга
· Примеры использования
· Работающие сайты
· Хостинги
· Вопросы и ответы
· Задать вопрос
· E-mail
 
Теория
· Компиляция и установка
· Идеология VITRAGE
· Оптимизация HTML
· Создание виртуальных хостов
· Создание структуры доменов
· Ваш собственный язык гипертекстовой разметки
 
О модуле
· Что такое VITRAGE
· История модуля
· Загрузить модуль
· Документация целиком
· Загрузить документацию в формате MS Word
· Слово автора
· English version
 
Технология VITRAGE
Один из витражей города Иркутска
Исходный код
· VHTML-код этой страницы (в новом окне)
· VHTML-код файла vitrage (в новом окне)
 
· Пример 11. "Ленты" данных, текущее время и связанные с этим тонкости

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

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

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

Для организации такой схемы в модуле VITRAGE предусмотрены встроенные тэги, выбор среди которых следует осуществлять исходя из цели включения и вида подключаемого файла данных. Самой простой способ - подключение при помощи тэга <%file%>:

<%file% name="include/news.html">

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

Если подключаемый файл содержит VHTML-код и логически является частью формируемой страницы, следует использовать тэг <%require%>:

<%require% name="include/products.vhtml">

Содержимое данного файла будет обработано модулем точно так же, как если бы оно было частью исходной страницы (то есть содержимое подключаемого файла вставляется в формируемую страницу, а после этого обрабатывается). Ясно, что в подключаемом VHTML-файле доступны для использования все те переменные и тэги, которые доступны для подключающего VHTML-страницы.

При использовании тэга <%require%> следует помнить, что указанный файл будет подключен только после окончания обработки текущей строки подключающего VHTML-файла. В связи с этим во избежание трудностей восприятия не рекомендуется использовать <%require%> в описаниях новых тэгов. Логичнее всего, если тэг <%require%> будет последним тэгом в строке подключающего VHTML-файла.

В том случае, если в подключаемом файле необходимо запретить замену глобальных переменных их значениями (такая необходимость может возникнуть, если доступ к файлу имеет редактор, который может случайно или преднамеренно использовать отображение глобальных переменных в незапланированных целях), следует пользоваться парой встроенных тэгов <%novarse%> и <%varse%>:

<%novarse%><%require% name="include/products.vhtml">
<%varse%>

И, наконец, в тех случаях, когда нам необходимо подключать VHTML-файл, но уже обработанный (то есть включать в одну страницу результат обработки другого VHTML-файла), мы можем воспользоваться тэгом <%include%>:

<%include% name="include/products.vhtml">

Это самый сложный способ подключения файлов, так как его принцип (подключается результат обработки) может быть неочевидным. Подключаемый файл может использовать доступные ему тэги, причем их набор не обязательно будет совпадать с набором тэгов для подключающего файла. В подключаемом файле не будут доступны локальные переменные, если подключение осуществляется из описания какого-либо тэга, но все глобальные переменные будут подключаемому файлу переданы, благодаря чему возможна передача ему данных. Если VHTML-код подключаемого файла изменил глобальные переменные, эти изменения не коснутся глобальных переменных подключающего файла - эту особенность также следует учитывать при планировании подобного рода файловых включений.

При необходимости возможна передача данных подключаемым с помощью тэга <%include%> файлам через так называемые параметры:

<%include% name="include/news.vhtml?b=1&e=10">

Используя такой метод (он называется "метод GET"), мы можем передать файлу любые данные, которые будут доступны в виде глобальных переменных (в приведенном выше примере в файле news.vhtml мы сможем оперировать переменными b и e). Но следует знать, что формируемый подобным образом URL необходимо кодировать согласно RFC 1738. В данном случае достаточно воспользоваться тэгом <%rawchars%> для передаваемых данных:

<%vitrage% name="Модуль VITRAGE" ver="версия 1.10">
<%rawchars% var1=name var2=ver>
<%include% file="include/file.vhtml?name=$name$&ver=$ver$">

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

<p><b>21.05&nbsp;14:07</b> Новость 12
<p><b>21.05&nbsp;14:05</b> Новость 11
<p><b>21.05&nbsp;13:35</b> Новость 10

Или, если используются описанные в файле vitrage тэги:

<прайс>Продукция 1<описание стандарт="ГОСТ 11066-74" оптовая="договорная" экспортная="10,10"></прайс>
<прайс>Продукция 2<описание стандарт="ТУ 6-02-01-030-91" оптовая="договорная" экспортная="310,25"></прайс>
<прайс>Продукция 3<описание стандарт="ТУ 6-02-709-76" оптовая="договорная" экспортная="120,20"></прайс>
<прайс>Продукция 4<описание стандарт="ГОСТ 26371-84" оптовая="4500,00" экспортная="4512,00"></прайс>

Такое расположение данных позволяет упростить их изменение и дополнение с использованием, в том числе, специально созданных для этого средств. Одним из подобных редакторов однотипных данных, записанных построчно, является VITRAGEd, разработанный автором модуля специально для разнообразных "лент". Этот онлайновый редактор (работа с ним осуществляется непосредственно через веб-интерфейс) вместе с документацией доступен для свободной загрузки на сайте модуля VITRAGE.

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

<!-- Powered by SibWeb's VITRAGE 1.10 -->

Если пользоваться для включения одних VHTML-файлов в другие тэгом <%include%> (то есть тэгом, включающем не сам VHTML-файл, а результат его обработки модулем), такие сведения, очевидно, будут сопровождать каждое включение каждого VHTML-файла. Чтобы избежать этой ситуации, мы можем запретить модулю VITRAGE добавление в конец обработанного им VHTML-файла сведений о своей версии посредством определения глобальной переменной NoPoweredBy:

<%vitrage% NoPoweredBy=1>

Сопутствующей задачей подключения "лент" изменяемых данных является отображение текущей даты и текущего времени. VITRAGE предлагает для этой цели встроенную переменную %time%, которой может быть присвоено значение текущего времени согласно выбранному шаблону. Более подробно принципы формирования шаблонов даты и времени приведены в соответствующем разделе данного руководства, здесь же приведем несколько наиболее распространенных форм. Например, текущее время вида "12:34" можно получить при помощи следующего шаблона:

<%vitrage% %time%="%H:%M">

Текущая дата вида "12.01.2002" формируется следующим образом:

<%vitrage% %time%="%d.%m.%Y">

Если же нам нужна форма "Сегодня 12/01/02, текущее время 12:34", нам следует задать шаблон так:

<%vitrage% %time%="Сегодня %d/%m/%y, текущее время %H:%M">

Поскольку все описанные в данном примере решения дают в качестве результата страницы, изменяющиеся во времени (динамические страницы), совершенно необходимо принудительно отключать кэширование для каталогов, содержащих такие страницы (ключевым словом VGCache в файле .htaccess):

VGCache Off

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