Процесс полностью прозрачен для остальной части скрипта, так что вы можете физически

добавить в базу данных любой текстовый файл, если он имеет имя файла, совместимое с вики.

Преимущество этого решения в том, что нет необходимости немедленно конвертировать

страница — она по-прежнему отображается правильно. Только редактирование страницы и повторное сохранение выполняет постоянное

преобразование.

Удаление скрытых полей

Включение страниц из вики со скрытым полем в текстовую базу данных, такую как

QuickiWiki на первый взгляд достаточно проста. Вики просто отображает страницу, скрытую

поля и все. Однако визуально это менее чем удовлетворительно, и может возникнуть путаница.

при редактировании такой страницы.

Стратегия наименьших усилий здесь следующая.

1. Проверить наличие маркера скрытого поля на загруженной странице. Если найдено,

извлеките текстовую часть и отбросьте остальные.

2. При повторном сохранении страница трансформируется в соответствующий этому формату

тип вики; то есть поля удаляются безвозвратно.

Этот подход «преобразовывать только при сохранении изменений» в большинстве случаев адекватен.

код для решения ситуации в QuickiWiki должен быть в двух разных модулях,

вики. cgi и редактировать. компьютерная графика

Критическое изменение в модуле редактирования, потому что мы хотим, чтобы форма редактирования

содержать только фактический текст, а не информацию о скрытых полях. Вверх по определению

моя ссылка $, мы добавляем определение маркера:

мой $mark = "\2 63" ;

Ниже мы модифицируем раздел, который следует за загрузкой содержимого страницы перед

заполнение формы редактирования:


288

АДМИНИСТРИРОВАНИЕ ВИКИ И ИНСТРУМЕНТЫ

если ( -e "страниц/$страница" ) {

open(F, "pages/$page") или die "$page: $!";

неопределенный $/;

$_ = <F>;

закрыть (Ф);

если ( /$ отметка/ ) {

мой %bla = split /$mark/, $_ ;

$_ = $bla{текст};

# преобразовать страницу со скрытым полем в обычную

}

с/&/&амп;/г;

с/</&lt;/г;

с/>/>/г;

$текст = $_;

$/ = "\п";

}

В основном модуле просмотра нам нужно сделать что-то подобное, чтобы предотвратить

скрытые поля от искажения отображения страницы:

если ( -e "страниц/$страница" ) {

open(F, "pages/$page") или die "$page: $ !";

неопределенный $/;

$_ = <F>;

закрыть (Ф);

если ( /$ отметка/ ) {

мой %bla = split /$mark/, $_ ;

$_ = $bla{текст};