Вот первый пример использования процедуры Abort Script. невозможность открыть
страница, которая существует, является фатальной ошибкой.
Сделать символ новой строки неопределенным, сделав его локальным для этой подпрограммы
кодирование может показаться непонятным, но оно позволяет читать весь файл сразу. Что
возвращенный список ключ-значение именованных компонентов страницы. Основной из них "текст",
который является фактическим содержимым страницы, в то время как другие представляют собой различные скрытые поля для
количество версий, дата и т. д.
Приготовьтесь служить
Объяснив процедуру извлечения, мы можем рассмотреть процедуру просмотра, которая обслуживает
запрошенная вики-страница.
sub HandleBrowse {
мой $title = $CookedInput{обзор};
моя %page = &RetrievePage($title);
254
АЛЬТЕРНАТИВЫ И РАСШИРЕНИЯ
мой% пар; # используется для сборки компонентов шаблона
$par{body} = &BodyText($page{text}) ; # визуализировать источник тела
Рендеринг страницы передается подпрограмме, где мы можем собрать все шаблоны.
разбор в одном месте. Это по существу идентично соответствующей процедуре в
QuickiWiki и возвращает полностью замененную HTML-версию страницы.
содержание. Остается только заполнить другие заполнители на странице шаблона.
$par{windowTitle} = "$title в $DefaultTitle" ;
$par{wikiLogo} = $LogoImage ;
$par{pageTitle} = $заголовок;
$par{pageTitle} = &AsAnchor($title) ; # красивый и вариант обновления
Используя подпрограмму рендеринга для создания гиперссылок из шаблонов страниц,
мы превращаем заголовок страницы в этом примере в ссылку, которая будет обновлять страницу. Другой
реализации вики могут вместо этого вызвать обратную ссылку, дать нам страницу поиска
с заполненным заголовком или просто показать заголовок в виде текста без связанного с ним
функциональность. Тебе решать.
$par{pageAction} .= <<"E0F" ;
[<A href="$ScriptUrl?edit=$title">Изменить эту страницу</A>]
EOF
$par{pageTop} = « " EOF " ;
<ФОРМА>
<A href="$ScriptUrl?$DefaultTitle">$DefaultTitle</A>
—
<INPUT type="submit" value="Обратные ссылки">
<INPUT type="hidden" size=l name="backref" value="$title"> -<A href="$ScriptUrl?FindPage">Поиск</A> —
$par{pageAction}
</F0RM>
EOF
$par{pageSummary} = <<"EOF" ;
<BR><SMALL>(Последнее редактирование $page{date} пользователем $page{LastEdit})</SMALL> ;
EOF
Использование конструкции «value-until-EOF» позволяет записывать сегменты с HTML-тегами.
не заботясь о правильном цитировании и экранировании, требуемом прямым
назначение. В основном, он позволяет использовать более длинные биты, такие как формы. (В источниках EOF
часто опускается, а <<n" пишется как "к следующей пустой строке". EOF понятнее
в печатном списке, подобном этому.)
Определив таким образом (большинство) заполнителей, мы используем общую процедуру для
заполните и подайте шаблон, а затем мы выходим.
РАЗБОР ЗАПРОСОВ
&ServePage($WikiTemplate,
}
255
\% пар) ;
Обслуживание страниц сделано универсальным, потому что мы будем использовать одну и ту же процедуру для нескольких разных
типы страниц с различными компонентами.
Ваша страница, сэр
sub ServePage {
мой ($pageTemp, $par) =
;
$$par{pageCss} = $CssUrl;
$$par{pageFoot} = « "EOF";
<I><A href ="$ServeRoot">$ServeHome</Ax/I> -- Дом вики:
<A href="$ScriptUrl?$DefaultTitie">$DefaultTitle</A>
EOF
# -v- сделать страницу
местный $/;
открыть (T, "$pageTemp") j| die "$pageTemp: $!" ;
местный $_ = <T>;
шкаф);
s/\$(\w+)/определено($$par{$1}) ? $$par{$l} : 1 '/гео ;
Распечатать;
}
Заполнение плейсхолдера pageFoot стало общим для всех, и именно поэтому
определяется первым в процедуре обслуживания. Опять же, переменная новой строки делается локальной, так что
весь файл шаблона, независимо от строк, может быть прочитан за одну операцию. Это относится
до конечной печати, когда заполненный шаблон отправляется клиенту.
Отрисовка текста
Рендеринг обрабатывается подпрограммой Body Text. Как уже отмечалось, нет существенного
разница между ним и аналогом QuickiWiki в вики. cgi (описано в
главу 7). Поэтому мы просто пройдемся по процессу в тексте. Хотя часто
длительный и со многими подчиненными подпрограммами, этот процесс не является сложным в концепции.
Сверло
• Выполнять специальную обработку исключений (экранированных) случаев.
• Найдите указанные шаблоны и замените их соответствующим текстом с HTML-тегами.
• Определите и активируйте гиперссылки по мере необходимости.
256
АЛЬТЕРНАТИВЫ И РАСШИРЕНИЯ
Первая глобальная замена касается зарезервированных символов для тегов HTML.
Для простой текстовой вики вам никогда не понадобятся маркеры пустых HTML-тегов (< > &) в
исходный текст, чтобы он оставался непереведенным при отправке клиенту браузера. Если это случилось, то
браузер мог безнадежно запутаться, пытаясь интерпретировать ложный HTML
наценка.
С другой стороны, если вы хотите разрешить исходный код HTML в вики, вы
нужно поставить осторожный танец замены и сбежавших блоков, чтобы достичь
желаемые результаты без конфликтов. Различные разделы главы 6 о настройке
ваша вики объясняет это больше.
Редактирование