Процесс полностью прозрачен для остальной части скрипта, так что вы можете физически
добавить в базу данных любой текстовый файл, если он имеет имя файла, совместимое с вики.
Преимущество этого решения в том, что нет необходимости немедленно конвертировать
страница — она по-прежнему отображается правильно. Только редактирование страницы и повторное сохранение выполняет постоянное
преобразование.
Удаление скрытых полей
Включение страниц из вики со скрытым полем в текстовую базу данных, такую как
QuickiWiki на первый взгляд достаточно проста. Вики просто отображает страницу, скрытую
поля и все. Однако визуально это менее чем удовлетворительно, и может возникнуть путаница.
при редактировании такой страницы.
Стратегия наименьших усилий здесь следующая.
1. Проверить наличие маркера скрытого поля на загруженной странице. Если найдено,
извлеките текстовую часть и отбросьте остальные.
2. При повторном сохранении страница трансформируется в соответствующий этому формату
тип вики; то есть поля удаляются безвозвратно.
Этот подход «преобразовывать только при сохранении изменений» в большинстве случаев адекватен.
код для решения ситуации в QuickiWiki должен быть в двух разных модулях,
вики. cgi и редактировать. компьютерная графика
Критическое изменение в модуле редактирования, потому что мы хотим, чтобы форма редактирования
содержать только фактический текст, а не информацию о скрытых полях. Вверх по определению
моя ссылка $, мы добавляем определение маркера:
мой $mark = "\2 63" ;
Ниже мы модифицируем раздел, который следует за загрузкой содержимого страницы перед
заполнение формы редактирования:
288
АДМИНИСТРИРОВАНИЕ ВИКИ И ИНСТРУМЕНТЫ
если ( -e "страниц/$страница" ) {
open(F, "pages/$page") или die "$page: $!";
неопределенный $/;
$_ = <F>;
закрыть (Ф);
если ( /$ отметка/ ) {
мой %bla = split /$mark/, $_ ;
$_ = $bla{текст};
# преобразовать страницу со скрытым полем в обычную
}
с/&/&амп;/г;
с/</</г;
с/>/>/г;
$текст = $_;
$/ = "\п";
}
В основном модуле просмотра нам нужно сделать что-то подобное, чтобы предотвратить
скрытые поля от искажения отображения страницы:
если ( -e "страниц/$страница" ) {
open(F, "pages/$page") или die "$page: $ !";
неопределенный $/;
$_ = <F>;
закрыть (Ф);
если ( /$ отметка/ ) {
мой %bla = split /$mark/, $_ ;
$_ = $bla{текст};