WTG Zebra 1.00. Работа с Zebra Site.



        Содержание раздела:
        1. Внешняя работа с Zebra Site
        2. Внутренняя работа с Zebra Site (администрация)
        2.1. Параметры
        2.1.2. Описание активации
        2.1.3. Описание аутентификации
        2.2. Редактирование страниц
        2.2.1. Свойства групп
        2.2.2. Автоматическое деление больших страниц
        2.2.3. Выбор страницы
        2.2.4. Добавление страницы
        2.2.5. Редактирование страницы
        2.3. Автоматическое добавление
        2.4. Схемы форматирования
        2.5. Описание страницы
        2.5.1. Процедура
        2.5.2. Ссылка
        2.5.3. Запись
        2.5.4. Условная инструкция
        2.5.5. Ключ

        Модуль Zebra Site является компонентом комплекса Zebra, отвечающим за поддержку работы сайта. Он обеспечивает генерацию и возврат страниц из базы, обработку дополнительных условий и событий.

        1. Внешняя работа с Zebra Site

        Внешний файл модуля называется zs.cgi. Кроме того, трансляция запроса ему же осуществляется интегрирующими модулями zebra.cgi и z.cgi при условии указания параметра z=s (см. ниже).
        Вызов страницы осуществляется любым из следующих вариантов:
        http://www.yourhost.com/cgi-bin/zs.cgi?p=NAMEPAGE
        http://www.yourhost.com/cgi-bin/zs.cgi?NAMEPAGE
        http://www.yourhost.com/cgi-bin/zs.cgi?p=NAMEPAGE&l=ru
        http://www.yourhost.com/cgi-bin/zs.cgi?p=NAMEPAGE&l=ru&f=alt
        http://www.yourhost.com/cgi-bin/zs.cgi?p=NAMEPAGE&lang=ru
        http://www.yourhost.com/cgi-bin/zs.cgi?NAMEPAGE&lang=ru
        http://www.yourhost.com/cgi-bin/zs.cgi?NAMEPAGE&lang=ru&prof=alt
        http://www.yourhost.com/cgi-bin/zs.cgi?lang=ru&NAMEPAGE
        http://www.yourhost.com/cgi-bin/zs.cgi?lang=ru
        http://www.yourhost.com/cgi-bin/zs.cgi?list=NAMELIST
        http://www.yourhost.com/cgi-bin/zs.cgi?NAMEPAGE&statistic=off
        http://www.yourhost.com/cgi-bin/zs.cgi

        Здесь NAMEPAGE — идентификатор страницы.
        Если указан параметр l (он же lang), ищется вариант ресурса для обозначенного языка, при отсутствии возвращается вариант по умолчанию. Если указан параметр f (он же prof), ищется вариант для соответствующего профиля. При отсутствии возвращается вариант для профиля по умолчанию.
        В том случае, если указаны и l, и f, поиск страницы производится в порядке, установленном согласно правилам, описанным в главе «Ядро. Разделение ресурсов». Как только обнаруживается страница для очередной комбинации, она считается соответствующей запросу и обрабатывается.
        Таким же образом выполняется поиск всех языко- и ресурсозависимых параметров, используемых Zebra.
        Параметр командной строки p (он же page) указывает наименование страницы, которую нужно возвратить по запросу. Аргумент p= указывать не обязательно, если в строке обнаруживается значение без ключа, оно автоматически считается наименованием страницы. Однако в некоторых случаях это может не сработать, поэтому для гарантированного возврата запрошенной страницы рекомендуется параметр устанавливать.
        Отсутствие наименования страницы, равно как и полное отсутствие параметров считается вызовом страницы с идентификатором index. Locale и профиль при этом определяются согласно правилам, описанным в главе «Ядро. Разделение ресурсов».
        Если в командной строке определен параметр list=NAMELIST, формируется список страниц из группы, обозначенной наименованием NAMELIST.
        Если страница или группа с идентификатором NAME отсутствует во всех проверяемых вариантах l и f, возвращается ресурс notfound.
        Дополнительный параметр командной строки statistic=off служит для отключения вывода статистики внизу страницы и справедлив в том случае, если статистика разрешена.
        Кроме прямого вызова zs.cgi из командной строки, можно воспользоваться следующими вариантами:
        zebra.cgi?z=s&COMMAND
        z.cgi?z=s&COMMAND

        Здесь COMMAND — параметры запуска для zs.cgi. Кроме того, вызову zs.cgi?index однозначно соответствуют:
        zebra.cgi
        z.cgi
        index.cgi

        Для неявного вызова модуля можно воспользоваться трансляцией контента через shtml-файл (этот способ, в частности, применяется при эмуляции ЧПУ, см. «Управление данными. ЧПУ»). Например, имеем файл index.shtml следующего содержания:
------begin of index.shtml-------
<!--#include virtual="/cgi-bin/zs.cgi"-->
-------end of index.shtml--------


        Тогда, положив его в корневой каталог сайта http://www.yourhost.com/, получим те же результаты следующим образом:
        http://www.yourhost.com/?p=NAMEPAGE&l=ru
        http://www.yourhost.com/index.shtml?NAMEPAGE&l=en
        http://www.yourhost.com/?list=NAMELIST&l=ru&statistic=off

        Если же определить немного иначе:
------begin of index.shtml-------
<!--#include virtual="/cgi-bin/zs.cgi?p=NAMEPAGE&l=ru&statistic=off"-->
-------end of index.shtml--------

то параметры командной строки на результат влиять не будут.

        * Сводный список параметров вызова Zebra Site
        — p, page — идентификатор запрашиваемой страницы; по умолчанию index
        — list — идентификатор запрашиваемой группы страниц
        — l, lang — явное указание locale для запрашиваемого ресурса
        — f, prof — явное указание профиля запрашиваемого ресурса
        — statistic=off — предписание отключить вывод статистики внизу страницы

        Кроме того особо обрабатываются следующие команды:
        — passwordrequest=1 — запрос формы на восстановление пароля;
        — activate=KEY — вызов процедуры активизации внесенных изменений (см. «Описание активации»);
        — search=WORDS — запрос на поиск по сайту (подразумевает также наличие дополнительных опциональных параметров, подробнее см. «Параметры»).

        2. Внутренняя работа с Zebra Site (администрация)

        Доступ к администрированию осуществляется посредством интегрирующего административного модуля ze.cgi либо напрямую вызовом административного модуля Zebra Site zse.cgi. При запуске запрашивается авторизация, для доступа к администрированию администратор должен иметь права с префиксом S. Доступ осуществляется пораздельно, таким образом, администраторы с разными правами могут иметь доступ в разные части Zebra Site. Полный доступ к разделам определяется правами Sa либо # (о разделении прав администраторов подробнее см. «Ядро. Администраторы»).
        В полном меню администрирования Zebra Site присутствуют следующие пункты:
        — параметры
        — редактирование
        — схемы форматирования

        2.1. Параметры

        Включить прегенерацию ресурсов. Включает механизм прегенерации ресурсов. В этом случае они, будучи однократно сгенерированы, записываются в файл на сервере, и в дальнейшем осуществляется возврат именно этого файла. Изменение ресурса влечет за собой перегенерацию файла. При этом учитываются динамические вставки (встроенные процедуры и т.д.) путем создания дополнительных cgi- и иных файлов. При прегенерации снижается нагрузка на сервер и Zebra. Отметим также, что Zebra генерирует отдельные ресурсы для каждого языка и профиля.
        Прегенерация по расписанию. Задается расписание, согласно которому будет производиться полная перезапись всех прегенерируемых ресурсов. Данное действие является страховочным на случай, если какое-либо изменение влияющих ресурсов прошло незамеченным.
        Записывать ресурсы в формате. Вариант «text/plain» рекомендует записывать прегенерируемые ресурсы в виде обычных текстовых файлов, при возврате которых пользователю отображается их содержимое в неформатированном виде; «text/html» — в форматированном, но без учета динамики; «text/shtml» — в форматированном виде с учетом динамических вставок. Наиболее полноценный образ прегенерируемых ресурсов получается при выборе «text/shtml» (при этом на сервере должен быть включен механизм обработки SSI).
        В данной версии прегенерация ресурсов не реализована.
        — Делить длинные страницы на выводе. Если размер конечного ресурса превышает некий заданный, Zebra автоматически разобьет его на части и снабдит линейкой навигации. Доступ к разным частям осуществляется указанием в адресной строке параметра part=N, здесь N — порядковый номер части, к которой запрашивается доступ. Разбиение осуществляется нечетко, то есть если конец текущей части приходится на середину предложения, Zebra найдет конец предложения, и только тогда оборвет фрагмент. Параметр «Делить длинные страницы на выводе» позволяет отключить механизм разбиения. Кроме того, можно индивидуально для каждого ресурса отключить разбиение, если в его описании указать специальный ключ $nosplit. Такое ограничение целесообразно применять к ресурсам, разбиение на части которых способно серьезно нарушить структуру страницы.
        — — при длине более, байт. Указывает размер, при превышении которого слишком объемные страницы будут подвергаться разбиению на части.
        — * Шаблон навигации по частям. Линейка навигации, включаемая в разбиваемые ресурсы для произвольного доступа к фрагментам. Подразумевает наличие следующих специально обрабатываемых ключей:
        — — $prev, номер предыдущего фрагмента;
        — — $next, номер следующего фрагмента;
        — — $last, номер последнего фрагмента;
        — — кроме того, для шаблона определяется набор ключей типа MULTIPLE, содержащий следующие элементы:
        —— $part, номер текущего фрагмента;
        Пример шаблона навигации по частям:

ПРИМЕР ШАБЛОНА

        Во избежание нарушений дизайна в ресурсах возможно явно указать местоположение линеек навигации при помощи ключей-комментариев <!--beginpaged-->, <!--linkpaged-->, <!--endpaged--> (подробнее см. «Автоматическое деление больших страниц»).
        — * Общий шаблон списка. Zebra позволяет получить список подгрупп и ресурсов группы, причем подобающе оформленный. Для оформления задается описание (шаблон) списка, который можно также переопределить для каждой группы индивидуально. Шаблон списка предполагает использование следующих специальных ключей:
        — — $recentgroup, наименование цитируемой группы
        — — $recentlist, собственно список
        Список можно задать двумя способами.
        1.
        2.
        Поддерживаются следующие специальные ключи для списка:
        — — $number, порядковый номер ресурса в списке (итерируется автоматически; если есть деление на списка на части, нумерация сохраняется)
        — — $pagename, идентификатор ресурса
        — — $pagetitle, наименование ресурса
        — — $counter, счетчик обращений к ресурсу
        Индексирование. Позволяет установить тип индексирования ресурсов (см. «Ядро. Параметры индексации»). «Системные настройки» — принимается общая конфигурация Zebra для индексирования. «Полнотекстовое» — без учета системной конфигурации индексирования проводить полный анализ ресурса.
        * Включать только слова. Справедливо при полнотекстовом режиме. Индексирует ресурс только по тем словам, которые указаны в данном списке.
        * Исключать слова. Справедливо при полнотекстовом режиме. Указывает список слов, по которым индексация ресурса не проводится.
        * Шаблон вывода результатов. Описание ресурса, который будет представлять результаты поиска, а также формы запроса на поиск. Шаблон предполагает использование следующих специальных ключей:
        — $found, количество найденных ресурсов
        — $..., ...
        Результаты поиска заносятся в ключи типа MULTIPLE. Определяются следующие ключи:
        — $href, ссылка на найденный ресурс;
        — $name, наименование найденного ресурса;
        — $adequate, адекватность ресурса запросу (определено, если ресурс полностью соответствует критериям запроса);
        — $find, слова из запроса, найденные в ресурсе;
        — $less, определено, если не все слова из запроса найдены в ресурсе; значение ключа перечисляет не найденные слова;
        — $ignorewords, перечисляет слова, проигнорированные при поиске (например, слишком короткие);
        — $relevance, релевантность (соответствие условиям поиска) найденного ресурса;
        — $createdate, дата создания ресурса;
        — $modifydate, дата последней модификации ресурса;
        — $desc, описание ресурса или фрагмент его содержимого;
        — $length, размер ресурса;
        Сортировка найденных ресурсов осуществляется по критерию сортировки, указанному параметром searchsort, либо в порядке приоритета:
Релевантность > Дата модификации > Дата создания

        Примечание. Релевантность подсчитывается, исходя из количества и частоты повторения запрошенных слов в ресурсе. Наибольшую релевантность имеют ресурсы, в которых встречаются все найденные слова.

        2.1.2. Описание активации

        В процессе работы с сайтом посетитель может проделать несколько разных финтов ушами. Два из них связаны с внесением кардинальных изменений в параметры пользователя, которые могут обрабатываться Zebra особым образом. Это регистрация пользователя и изменение активного адреса e-mail. При внесении таких изменений в базе пользователей Zebra осуществляются временные модификации, обозначаемые уникальным ключом. Этот ключ отправляется на приведенный адрес электронной почты, и если пользователь после этого проделает действия, направленные на активацию изменений, сопоставленных с ключом, изменения активируются. В противном случае они через некоторое время (соответствующее параметру ожидание верификации, сут, см. «Управление данными. Параметры настройки») будут объявлены недействительными, и тогда уже даже подоспевший ключ активации не поможет.
        Для пользователя активация осуществляется открытием в браузере адреса:
http://www.yourhost.com/cgi-bin/zs.cgi?activate=KEY
Здесь KEY — ключ активации (он может быть двадцати- или болеезначным). Ситуация, когда в адресной строке встречается параметр activate, обрабатывается Zebra особо, поэтому вместо zs.cgi может быть zf.cgi, zm.cgi и т. д. После активации пользователю возвращается системный ресурс, определенный параметрами шаблон системного сообщения и информация о внесении пользовательских изменений (см. «Ядро. Дизайн»). Если посетитель проводил процедуру регистрации, то в отдельных случаях возможна ситуация, что его последний запрос, инициировавший регистрацию, был сохранен во временном аккаунте, и после регистрации принят к дальнейшей обработке.

        2.1.3. Описание аутентификации

        К некоторым ресурсам Zebra может быть установлен конфиденциальный доступ различных уровней. Во-первых, для доступа может потребоваться только регистрация. Во-вторых, регистрации может быть недостаточно — аккаунт пользователя должен быть включен в группу, имеющую привилегии относительно запрашиваемого ресурса. Все эти действия обрабатывает система аутентификации Zebra. Она же при необходимости инициирует процедуру регистрации.
        Zebra автоматически переходит в режимы регистрации, аутентификации или сохранения пользовательских параметров, если в передаваемых от пользователя данных встречаются некоторые особо обслуживаемые ключи.
        — authorize, активирует процедуру аутентификации пользователя, при этом рассматриваются значения параметров login, email, password (или pwd); его можно установить как скрытый элемент формы, либо как кнопку, например:
        <input type="hidden" name="authorize" value="1">
        <input type="submit" name="authorize" value="Войти">
        <input type="image" name="authorize" src="/pics/enter.gif" width="60" height="15">

        — edituser, активизирует процедуру редактирования пользовательских параметров, при этом используется системная форма настроек пользователя (см. «Управление данными. Параметры пользователя»), а на этапе сохранения происходит верификация указанных значений и внесение изменений в базу, либо возврат сообщения об ошибке;
        — registration, активизирует процедуру регистрации пользователя, при этом используется системная форма настроек пользователя (см. «Управление данными. Параметры пользователя»), а на этапе сохранения действует согласно настройкам о регистрации новых пользователей сайта;
        — saveuser, активизирует процедуру верификации и сохранения внесенных изменений (возможно, создания временного или постоянного аккаунта для нового пользователя); вместе с элементом saveuser должен быть в скрытом поле формы установлен определитель действия (registration или edituser), в соответствии с которым будут осуществляться изменения. Если произведена попытка применить edituser к несуществующему аккаунту, это может привести к ошибке.

        2.2. Редактирование страниц

        В Zebra Site можно создать неограниченное количество ресурсов (страниц), которые будут обрабатываться согласно обычным правилам Zebra. Во избежание нагромождений ресурсы можно объединять в группы, группам присваивать общие для всех подчиненных ресурсов свойства, часть этих свойств можно также индивидуально установить для отдельных ресурсов. Вложенность групп не ограничена. Полный идентификатор ресурса, включенного в группу, будет составлен из полного идентификатора группы и личного идентификатора ресурса в данной группе. В пределах одной группы не может быть двух ресурсов или двух групп с одинаковыми идентификаторами. Однако группа и страница одинаковые идентификаторы иметь могут.
        При входе в группу дается сводная статистика подгрупп и ресурсов (идентификатор, locale и профиль, наименование со ссылкой для быстрого перехода на страницу, даты создания и последнего обновления, размер и счетчик запросов) и несколько параметров, определяющих поведение zs.cgi при обработке страниц. При этом не отображаются страницы, недоступные для администрирования активному администратору.

        2.2.1. Свойства групп

        Идентификатор. Сокращенный идентификатор группы. Полный идентификатор группы образуется слиянием с идентификаторами родительских групп. Например, для группы ресурсов library, находящейся внутри группы content, полный идентификатор будет выглядеть как content/library (а для всех ресурсов, включенных в группу, идентификаторы будут выглядеть как content/library/NAMEPAGE), и обращение к группе будет, например, таким:
http://www.yourhost.com/cgi-bin/zs.cgi?list=content/library

        Название группы. Название, под которым группа будет фигурировать на сайте.
        Каталог для прегенерации. При включенной прегенерации ресурсов можно явным образом задать каталог, в который будут записываться прегенерированные файлы этой группы. Если каталог не задан, используются установки по умолчанию.
        Доступ к ресурсам группы. Вариант «По регистрации» проверяет, зарегистрирован ли посетитель на сайте, и если нет, то предлагает пройти регистрацию. Зарегистрированные посетители беспрепятственно допускаются к просмотру ресурсов в группе. Доступ к ресурсам группы с режимом «Конфиденциальный» разрешается только зарегистрированным пользователям, включенным в пользовательские группы, которые обозначены как валидные для данной группы. Вариант «Иерархический» предписывает ориентироваться на соответствующие параметры родительских групп.
        — включить группу пользователей и исключить группу пользователей позволяют оперировать группами пользователей, которые имеют доступ к ресурсам группы.
        Разрешить формирование списка. Можно запретить формирование списка ресурсов группы, если это по каким-то причинам нецелесообразно. В таком случае на пришедший от посетителя запрос списка будет возвращаться страница notfound.
        — включать в список, указывает, какие из элементов группы следует включать в список;
        Построение списка по группе осуществляется в соответствии с шаблоном recentpage (см. «Дизайн».
        Получение списка реализуется стандартным вызовом головного модуля Zebra Site:
http://www.yourhost.com/cgi-bin/zs.cgi?list=GROUP
Здесь GROUP — идентификатор группы.

        2.2.2. Автоматическое деление больших страниц

        Zebra Site может автоматически делить слишком большие страницы и выдавать их пофрагментно. Применимы два варианта:
        — делить любые страницы, длина которых превышает максимальную заданную
        — делить только страницы, в которых присутствуют метки деления
        Если реализуется первый вариант, но страница имеет метки, она обрабатывается как страница с метками.
        Что такое «метки»? Допустим, страница состоит из трех логических фрагментов: заголовок (сколь угодно большой), собственно содержимое, подвал (тоже сколь угодно большой и навороченный). Если размер собственно содержимого превышает максимальный, то можно предписать его разбиение на фрагменты, указав в html-коде страницы следующие комментарии:
        <!--linkpaged--><!--beginpaged--> — в начале делимого
        <!--endpaged--><!--linkpaged--> — в конце делимого
        Критериями начала и конца фрагмента являются beginpaged и endpaged, а linkpaged реализует добавление строчки для навигации по разделенным фрагментам. Шаблон строки навигации предполагает наличие следующих ключей:
        $first — ссылка на первый фрагмент страницы
        $last — ссылка на последний фрагмент страницы
        $prev — ссылка на предыдущий фрагмент страницы
        $next — ссылка на следующий фрагмент страницы
        Основной блок строки навигации реализует условная инструкция multiple:
        %multiple{<a href="$command"> $part </a>%separator{|}separator%}multiple%
здесь:
        $command — ссылка на соответствующий фрагмент страницы
        $part — порядковый номер этого фрагмента
        Инструкция multiple повторяется столько раз, сколько это требуется для полного перечисления фрагментов страницы. Инструкция separator задает символ или строку для разделения ссылок на фрагменты.
        Ключ linkpaged может быть установлен любое количество раз в любое место страницы за пределами ограничителей beginpaged и endpaged.
        При разбиении «любых» страниц страницы, не содержащие метки, подвергаются разбиению целиком. При этом на выводе в начало добавляются наименование страницы в базе (в качестве титула), ключи $begbody и linkpaged, а в конец — ключи linkpaged, $endbody и статистика (если ее вывод разрешен).
        Разбиение страниц осуществляется «щадящим» способом — если текст, отрезанный на очередном этапе, не является законченным, производится дальнейший анализ фрагмента до обнаружения явного завершения логики текста, то есть либо до символа конца абзаца, либо до конца всего фрагмента. Таким образом, предложения будут не обрываться на середине слова, а аккуратно завершаться в текущем же фрагменте. В редких случаях это может привести к отсутствию значимого текста в последнем фрагменте. Тогда просто постарайтесь оптимизировать делимое содержимое страницы, чтобы исключить такую возможность.

        2.2.3. Выбор страницы

        Выбор страницы на редактирование осуществляется установлением нескольких параметров в верхнем меню раздела. Если вы собираетесь редактировать страницы для языка или профиля, отличного от текущего, установите сначала язык и профиль, после чего найдите нужную вам страницу. Выбор любого из пунктов меню страниц ведет к автоматическому переходу на редактирование этой страницы (при включенном JavaScript), поэтому его следует делать в последнюю очередь.
        Если количество страниц превышает заданный размер списка (см. «Администраторы»), Zebra Site осуществляет разбиение списка на несколько страниц. Перемещаться по ним можно, используя кнопки << и >>, возникающие соответственно случаю. Кроме того, указав в поле ввода слева от выбора языка некий фрагмент, можно отфильтровать список. Будут выведены только те страницы, идентификаторы (а при отображении названий также и названия; см. «Администраторы») которых содержат указанный фрагмент. Если первым символом фильтра поставить %, отбор будет производиться с использованием регулярных выражений.

        2.2.4. Добавление страницы

        Выбор в меню «Страницы» пункта «Добавить» предписывает создать новую пустую страницу, в которую администратор может внести нужные ему данные. Поскольку действия в данном случае отличаются от редактирования страницы только полным отсутствием значений в полях и скрытием некоторых полей, подробно рассматривать этот вариант не будем.

        2.2.5. Редактирование страницы

        Элементы.
        — Идентификатор. Один из самых важных параметров страницы, реализует ссылку на страницу в командной строке zs.cgi и в прочих параметрах Zebra.
        — Название страницы. Второстепенная характеристика, используется при именовании элемента в меню, а также при генерации страницы в том случае, если в коде страницы не определены теги <title> и </title>.
        — Источник. Параметр, содержащий информацию о ресурсе, из которого было взято содержимое страницы. Если было использовано несколько ресурсов, запоминается последний. Не отображается в случае явного задания кода страницы.
        — Регулярно обновлять. Предписывает осуществлять обновление страницы из указанного источника согласно указанной регулярности (см. «Формат расписания»).
        — HTML-код. Здесь должно содержаться описание страницы (см. «Описание страницы»), которое после рендеринга будет возвращаться клиенту в виде конечной страницы, либо одна из следующих команд:
        http://www.anywherehost.com/anywherepage.htm
        location: http://www.anywherehost.com/anywherepage.htm

        То есть, если в первой строке кода начиная с первого символа обнаруживается одна из указанных комбинаций, то производится переадресация на обозначенный URL.
        — Взять из файла на сайте. В этом поле можно указать название файла, из которого будет считано содержимое страницы и предложено для сохранения на следующем этапе. По умолчанию файлы берутся из директории, заданной параметром pathsite (см. «Ядро. Основные параметры»). Если ввести URL, будет произведена попытка получить соответствующий ресурс из Интернета с последующей обработкой.
        — Взять из файла на диске. В качестве кода можно также передать на сайт файл с собственного жесткого диска. Для этого необходимо указать полный путь к нему.
        Если задействован один из этих двух пунктов, сохранение страницы не производится, однако осуществляются все необходимые манипуляции и преобразования, после чего код предлагается на правку и дополнение параметров. Дальнейшее сохранение уже собственно сохранит страницу. Внимание: если html-код уже был определен, и вы указали новый источник, старый код будет потерян.
        — Кодовая страница источника. Позволяет явно задать кодовую страницу источника. После получения ресурса он будет соответственно перекодирован из указанной кодировки в Windows-1251 (внутренняя кодировка Zebra).
        — Предварительная обработка. Позволяет указать подпрограмму для обработки полученного ресурса. Таким образом можно, например, получать новости из новостных строк, анализируя появивишиеся с предыдущего сеанса и сохраняя их. В список подпрограмм обработки включаются процедуры, имеющие соответствующий признак (см. «Управление данными. Редактирование процедур»).
        — Схема форматирования. Можно выбрать одну из определенных вами схем форматирования документа (см. «Схемы форматирования»), при этом информация о выбранной схеме будет сохранена, и при дальнейших обновлениях документа автоматически применяться без необходимости явного указания.
        — Прегенерация страницы. Указывает прегенератору, подлежит ли данная страница обработке при прегенерации сайта в html-режим. Следует отметить, что в случае прегенерации страниц, включенных в закрытые группы, парольная защита на них действовать не будет. Поэтому такие страницы рекомендуется запрещать для прегенерации.
        — Счетчик. Указывает счетчик запросов редактируемой страницы. Заметим, что счетчик страницы (а также всего сайта) не задействуется при использовании прегенерации страниц (если только вызов счетчиков не определен дополнительно каким-либо образом).
        — Параметры: язык, профиль. Действуют для текущей страницы. Если у уже имеющейся страницы изменить эти параметры и сохранить страницу, будет создана новая страница с указанными locale и профилем.
        Кнопка «Сохранить» действует соответственно текущей ситуации — либо сохраняет страницу, либо производит анализ и обновление страницы для дальнейшей правки. Кнопка «Обновить» производит анализ и обновление страницы согласно имеющейся информации об источнике. «Удалить» удаляет страницу.
        Примечание. Один из самых простых способов создать новую страницу на основе уже имеющейся — изменить у текущей страницы идентификатор. При этом рекомендуется поменять также название, чтобы не перепутать ресурсы в дальнейшем.

        2.3. Автоматическое добавление

        Автоматическое добавление страниц — мощный механизм для пакетного преобразования вашего html-варианта сайта в сайт, поддерживаемый Zebra.
        В первую очередь нужно указать каталог на сервере, из которого будут конвертироваться файлы, а также маску для фильтрации списка файлов. Далее будет предложена таблица с найденными файлами, сводной статистикой и параметрами для добавления.
        Файл считается уже добавленным, если существует ресурс с идентификатором, совпадающим с его именем (за вычетом расширения). Тогда галочка для добавления файла не ставится. В остальных случаях такая галочка устанавливается автоматически. В графе «Регистрация» для зарегистрированных файлов отображается дата последней модификации соответствующей страницы.
        В качестве параметров добавления можно определить целевой язык, профиль и схему форматирования (см. «Схемы форматирования») для каждого файла.
        После принятия отображается сводная таблица результатов сохранения. Прямо отсюда можно отправиться на страницу, полученную конвертацией файла. Новые ресурсы можно уже и редактировать (см. «Редактирование страницы»).
        Если количество найденных файлов больше 20, просмотр их осуществляется постранично, при этом в нижней правой части таблицы появляются кнопки навигации. Передвижение по страницам не применяет установленные галочки на файлах текущей страницы, за это ответственна только кнопка «Отправить».

        2.4. Схемы форматирования

        Схемы форматирования определяют большинство параметров, в соответствии с которыми будут осуществлены преобразования полученных ресурсов. Основная схема — default, ее характеристики можно изменить. Если вас не удовлетворяют значения, обозначенные в схеме по умолчанию, вы можете добавить другие схемы, придав им различные наименования для успешного различения. Новые схемы изначально имеют характеристики, совпадающие со схемой по умолчанию.

        Элементы
        — Схема. Идентификатор схемы. Схемы форматирования не имеют своих наименований или комментариев, поэтому старайтесь делать идентификаторы наиболее осмысленными (придерживаясь при этом, однако, пункта «Ядро. Наименования»).
        — Осуществить преобразование:
        — — ссылок, предписывает конвертировать явные ссылки на файлы в том же каталоге, что и источник, в фрагменты вида %link%, которые при генерации страницы заменяются на стандартные ссылки Zebra Site;
        — — концов строк в теги, например, если в качестве источника выступает простой текстовый файл, лишенный html-форматирования, Zebra может установить фрагменты конца и начала абзаца вместо символов конца строки;
        — — пробелов в обязательные, во избежание потери специфического форматирования в подобных же текстовых файлах Zebra может преобразовать несколько последовательных пробелов в комбинации типа &nbsp;, которые, как правило, отображаются браузерами как обязательные пробелы;
        — — тире, при наличии этого параметра знаки дефиса - в местах, контекстно соответствующих символу тире , будут заменены на тире;
        — — кавычек, обычные кавычки " будут преобразованы в парные « и »; хотя при этом используется максимально адаптированный алгоритм, в некоторых случаях он может работать неправильно, поэтому проверяйте корректность преобразования в конечном описании ресурса;
        — — абзацных тегов, предписывает заменить все возможные не соответствующие установленным теги начала и конца абзаца на определенные в данной схеме форматирования.
        — Признаки начала и завершения абзаца. Здесь, собственно, устанавливаются эти самые теги начала и конца абзаца.
        — Удалить:
        — — заголовки страниц, при считывании источника Zebra Site выделяет заголовок страницы из тегов <title> и </title> и полагает его новым наименованием страницы, при этом из кода оно вместе с тегами может быть удалено;
        — — теги <body>, поскольку Zebra использует собственный код для установления тегов <body> и </body>, целесообразно применять удаление таких тегов в страницах; при этом теги не просто удаляются, а заменяются на ключи $begbody и $endbody;
        — — разделы <head>, а вот они ничем не заменяются, просто удаляются;
        — — мета-теги, аналогично;
        — — множественные пробелы, случай, практически противоположный преобразованию пробелов в обязательные — если там необходимо было сохранить форматирование при помощи хитрого преобразования пробелов, то данный пункт направлен на оптимизацию кода путем удаления повторяющихся пробелов, чем — чего греха таить — часто страдают начинающие веб-мастеры.
        — Удалить весь код до фрагмента. Если в тексте, полученном из источника, будет найден указанный фрагмент, все содержимое до него будет уничтожено. Рассматриваются регулярные выражения.
        — Удалить весь код после фрагмента. Аналогично, но содержимое будет уничтожено после найденного фрагмента. Рассматриваются регулярные выражения.
        — Предварительная обработка. Здесь можно определить процедуру конвертирования источника, аналогично «Предварительной обработке» из «Редактирования страницы». Определение в схеме форматирования конвертора имеет меньший приоритет по сравнению с «Редактированием страницы».

        2.5. Описание страницы

        Приступим к самому главному разделу данной главы. То, для чего, в общем-то, существует Zebra Site, — рендеринг (генерация) страниц в соответствии с описанием, хранящимся в базе страниц сайта.
        Итак, что такое «описание страницы»? В предельно простом варианте — обычный html-код. В таком случае он будет возвращаться практически без изменений (разве что с некоторыми модификациями общего плана, см. «Дизайн»). Однако такой сайт будет просто являться cgi-версией обычного html-сайта. Что, очевидно, особой выделки не стоит.
        Истинная мощь Zebra проявляется при создании сложных страниц с использованием записей, встроенных подпрограмм и условных инструкций. В результате отработки отслеженных событий одна и та же страница может приобрести совершенно иной вид для двух разных пользователей. Что, в общем-то, и является одной из основных целей не только Zebra Site, но и всей Zebra.
        Zebra на уровне описания страниц оперирует следующими простейшими понятиями:
        — процедура
        — ссылка
        — запись
        — условная инструкция
        — ключ

        2.6.1. Процедура

        Процедура — встроенная подпрограмма (см. «Управление данными. Подпрограммы»), ссылка на которую особым образом встраивается в код:
        %#function#%
        %#function(arg1,arg2...)#%
        Если в описании страницы встречается фрагмент такого вида, то выполняется специфицированная процедура. Если определены аргументы, они передаются в качестве параметров вызова. В случае, если процедура возвращает какое-либо значение, оно вставляется вместо указанного фрагмента, если нет — фрагмент просто удаляется. В случае ошибки выполнения вместо фрагмента записывается сообщение об ошибке.
        Процедуры могут использовать все стандартные ресурсы Zebra, а также, посредством запуска runfunc — и другие встроенные подпрограммы (см. «Руководство по API»). Процедуры могут применяться для различных вставок, требующих предварительного вычисления и нетривиальной модификации.

        В стандартном варианте Zebra поставляется несколько процедур.
        — count(name). Возвращает число — количество запросов страницы name. Если name не указан, возвращается значение для текущей страницы. Значение подсчитывается для страниц с идентификатором name во всех вариантах locale и профилей. Если name=site, возвращается глобальный счетчик сайта.
        — createdate(name). Возвращает строку, содержащую дату создания страницы name в установленном формате. Если name не определен, возвращается значение для текущей страницы.
        — accessdate(name). Возвращает строку, содержащую дату последнего доступа к странице name в установленном формате. Если name не определен, возвращается значение для текущей страницы.
        — modifydate(name). Возвращает строку, содержащую дату последней модификации страницы name в установленном формате. Если name не определен, возвращается значение для текущей страницы.
        — currentdate. Возвращает строку, содержащую текущую дату в установленном формате.

        2.6.2. Ссылка

        «Ссылка» применяется для упрощения создания ссылок на документы, генерируемые Zebra. Синтаксис:
%name%

        Здесь name — идентификатор страницы, на которую делается ссылка. При рендеринге производится соответственная замена ссылки на обычный линк с подстановкой объявленного идентификатора, а также добавлением указания языка и профиля ресурса, дабы переход осуществлялся с сохранением установленных параметров.

        2.6.3. Запись

        Запись применяется для уменьшения трудозатрат при создании повторяющихся фрагментов кода в разных страницах или в одной и той же. Запись может также служить для хранения текстового наполнения сайта, в таком случае в функции редактора сайта будет входить только изменение соответствующих записей. Синтаксис:
$name

        Здесь name — идентификатор записи. Запись должна быть определена через соответствующий пункт администрирования (см. «Управление данными. Записи»), потому что тогда она вносится в реестр записей. Если же она в реестре записей не специфицирована, то считается ключом, а ключи обрабатываются уже иначе.
        При обнаружении записи, соответствующей name, найденный фрагмент заменяется на ее содержимое. Запись, в свою очередь, может содержать другие вложения, соответствующие ссылкам, процедурам, записям или ключам — все они будут обрабатываться до тех пор, пока не останется ни одного вложения. Крайне не рекомендуется использовать рекурсивные вложенности (то есть, например, ссылку в записи на саму себя), поскольку в таком случае вы рискуете получить длительную задержку и в результате ошибку по таймауту.
        Некоторую информацию о вложениях и зависимостях в сложной записи можно получить, нажав на кнопку с символом «@», расположенную слева от кнопки «Сохранить» в разделе редактирования записей.

        2.6.4. Условная инструкция

        Условная инструкция — предельно простой, но мощный инструмент для генерации зависимого контента. Синтаксис:
        %name{some text}name%
        %name{some text}name{other text}name%
        %REVERSEname{some other text}name%
        %REVERSEname{some other text}name{more other text}name%
        %MULTIPLEname{some other text}name%

        Здесь name должно совпадать с одним из ключей списка int (см. «Ядро. Основной список int»). Если такой ключ существует и не равен нулю, аргумент инструкции, заключенный в фигурные скобки, высвобождается и обрабатывается как обычный текст. Код инструкции при этом удаляется. Если ключ не определен или равен нулю, инструкция удаляется полностью.
        Префикс REVERSE инвертирует действие инструкции, то есть в случае, когда ключ существует и не равен нулю, инструкция удаляется полностью, в противном случае — аргумент остается.
        Если инструкция состоит из двух частей, разделенных фрагментом }name{, то вторая часть рассматривается как альтернативное условие и выполняется при ложном значении первой.
        Префикс MULTIPLE предписывает произвести многократную обработку фрагмента, обозначенного условием, с целью установления множественных однотипных данных. Подробнее об организации такой обработки см. «Руководство по API».
        Условные инструкции предусматривают также следующие зарезервированные операторы:
        — file. Синтаксис: %file{fullpath}file%. Предписывает поместить вместо инструкции содержимое файла, обозначенного аргументом.
        — exec. Синтаксис: %exec{fullpath}exec%. Предписывает выполнить внешний перловый скрипт. Если произошла ошибка выполнения, аргумент заменяется сообщением об ошибке, иначе никаких значений вместо аргумента не устанавливается.
        — rem (синоним: comment). Синтаксис: %rem{text of commentary}rem%. Отмечает фрагмент, являющийся комментарием. При генерации страницы удаляется без каких-либо условий. Наличие префикса REVERSE значения не имеет.
        — embed. Синтаксис: %embed{object;arg1;arg2;arg3...}embed%. Внедряет объект, заданный параметром object, при этом могут учитываться объектно-зависимые аргументы arg1, arg2, arg3 и т. д. Тип объекта определяется конкретными настройками Zebra, в частности, установленными модулями.
        — userform. Синтаксис: %userform{formname}userform%. Генерирует форму пользовательских параметров formname в соответствии с текущими условиями и помещает ее в указанную позицию.

        2.6.5. Ключ

        Замена ключей — предпоследний уровень преобразований, проводимых над страницей. Заменяются все ключи, описанные списком int. Синтаксис:
$name
${name}

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

        Последний уровень преобразований — конвертация последовательностей &#36; и &#37; в символы $ и % соответственно. Ранее они были приведены к такому виду во избежание неверной трактовки во время рендеринга страниц, поскольку являются техническими символами для определения процедур, ссылок, записей и ключей. Заметим, что неверная трактовка не обязательно возможна, но более или менее вероятна. Правда, есть случаи, когда она произойдет обязательно — например, при использовании знака доллара $.
        Необходимо также отметить, что особым образом обрабатываются следующие ключи:
        — $dcolor, в соответствии с которым осуществляется перебор цветов согласно заданному порядку (см. «Ядро. Дизайн»);
        — $nostatistic, запрещающий отображение статистики для этой страницы (см. «Ядро. Основные параметры»);

<< Управление данными Работа с Zebra Forum >>