Общим для всех версий, показанных до сих пор, является то, что только самые последние изменения на странице
отслеживаются. Старые элементы изменений для страницы могут быть сохранены на заархивированных страницах, например,
самая последняя для страницы в тот же день, если передаются ежедневные копии. Удаление дубликата
записи страниц были ранней функцией, позволяющей сделать видимый журнал достаточно коротким.
270
АДМИНИСТРИРОВАНИЕ ВИКИ И ИНСТРУМЕНТЫ
Каждая вариация имеет свои особенности и ограничения. Некоторые вики также пытаются уточнить
изменения в категории второстепенных и основных правок, обычно с помощью выбора флажка в
усмотрение лица, осуществляющего редактирование.
Совет 9,2: Адаптируйте отслеживание к текущим потребностям
В профессиональной среде вам необходимо тщательно учитывать потребности в отслеживании, чтобы определить
как далеко можно зайти во взломе этой функциональности. Вы можете, например, захотеть сохранить
запись о том, кто и когда создал страницу, длиннее, чем простой список изменений.
Пример кода
Здесь мы приводим пример кода, который создает и обновляет страницу RecentChanges для
вики со скрытым полем. Решение QuickiWiki просто обрабатывает файл подкачки таким, какой он есть.
вместо того, чтобы разбивать его на именованные поля.
Накладные расходы кода для обновления общедоступного списка с самыми последними изменениями
вставленный вверху, относительно мал, как и механизм предотвращения дублирования
записи для одной и той же страницы. Пример источника для этого:
поджурнал истории {
мой ($ds, $log) =
# дата и время
мой %rc = &RetrievePage(RecentChanges);
$rc{текст}
s/'[ : *] $title ( . *) \n//g;
пример
# -v- мы используем (первое) правило для определения даты
если только ($rc{текст}
/
/) {
$rc{текст}
"\nАвтоматическое обновление ниже
изменить как параметры
# удаляет предыдущий
вставка
правило.\n
";
}
# -v- вставить дату, если она еще не указана
$rc{текст} =~ с/
*/
\n$ds\n/, если только $rc{text} =~ /$ds/;
$rc{text} =~ s/$ds/$ds$log/;
# вставляет изменение после даты
&ReplacePage(RecentChanges, \%rc);
}
Мы передаем поля страницы процедуре сохранения по ссылке. Определено в вызове
Процедура, которая обрабатывает публикацию редактируемой страницы:
мой $title = $CookedInput{post};
мой $trace = "$ ENV{REMOTE_USER} $ ENV{REMOTE_ADDR}
$ENV{REMOTE_HOST}";
мой $log = "\n* $title ... at $ts by \" $page {LastEdit} \" ($trace)" ;
ИСТОРИЯ СОБЫТИЙ
271
Совет 93: подмена IP