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 (в новом окне)
 
· Пример 13. Несколько приемов работы с файлами

Начиная с версии 1.16, модуль VITRAGE получил возможность работы с файлами. Рассмотрим в рамках данного примера следующие задачи:

  • построчное копирование одного файла в другой;
  • отображение исходного кода VHTML-файла;
  • отображение размера и даты модификации выбранного файла.

Первую задачу успешно решает следующий набор тэгов:

<filecopyline destination="">
<%copy% line="file%$%times%$">
<%append% "$destination$"="$line$">
</filecopyline>

<filecopy source="" destination="">
<%read% file="$source$">
<%write% "$destination$"="" %parse%="$file$">
<filecopyline destination="$destination$" %times%="$file$">
</filecopy>

Теперь, вызывая тэг <filecopy> следующим образом:

<filecopy source="index.vhtml" destination="index.copy">

мы получим точную копию файла index.vhtml в файле index.copy. Обратим внимание на то, что у текущего каталога должны быть установлены права, позволяющие пользователю, от имени которого запускается веб-сервер Apache, создавать файлы.

Команда

<%write% "$destination$"="" %parse%="$file$">

в тэге <filecopy> создаст новый файл, если он еще не существует, или "обнулит" уже существующий файл. Заметим, что этот тэг будет выполнен только в том случае, если исходный файл был успешно прочтен и содержал хотя бы одну строку.

Изменив в тэге <filecopyline> %times% на %btimes%, мы получим копию файла, в котором строки будут расположены в обратном порядке.

Задача отображения исходного кода VHTML-страницы аналогична предыдущей задаче с условием, что строки исходного файла не копируются в другой файл, а выводятся обычным способом. Каждая из строк предварительно должна быть обработана тэгом <%htmlcharsd%>, чтобы все специальные символы ("<", ">", "&", кавычки) заменялись соответствующими последовательностями ("&lt;", "&gt", "&amp;", "&quot;"), делая исходный код доступным для отображения в браузере. Итак:

<filesourceline>
<%htmlcharsd% line="f%$%times%$">
$line$<br>
</filesourceline>

<filesource file="">
<%readln% f="$file$">
<filesourceline %times%="$f$">
</filesource>

Вызывая из VHTML-файла тэг <filesource>:

<filesource file="index.vhtml">

мы получим отображение исходного кода файла index.vhtml.

Обратим внимание на то, что мы осуществляем чтение файла встроенным тэгом <%readln%>, который удаляет из прочтенных строк символы их завершения: это позволит нам сделать вывод строк файла более аккуратным.

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

<fileinfo file="">
<%stat% f="$file$">
<%echo% str="Файл не существует" %noparse%="$f$">
<%vitrage% %timestamp%=$f%mtime$ %parse%="$f$">
<%vitrage% %time%="%Y.%m.%d" %parse%="$f$">
<%primitive% s="%f%size out 1024 / %size in" %parse%="$f$">
<%echo% str="Дата: $%time%$; $size$&nbsp;КБ" %parse%="$f$">
</fileinfo>

Никаких "особых хитростей" в описании данного тэга нет: для определения, существует файл или нет, многократно используется значение переменной f, определенной встроенным тэгом <%stat%>, а пересчет байтов в килобайты выполняет простая последовательность операторов Primitive.