<<Другая страница
Совет 6.17. Автоматическое создание двусторонних ссылок между страницами
Самый простой способ использовать эту функцию — постоянно создавать двусторонние ссылки между страницами по мере их создания. На родительской странице, где вы
установить ссылку на новую страницу, вы используете синтаксис « для автоматического создания
целевая страница, уже подготовленная с обратной ссылкой.
Наш код подхватывает эту модификацию обычной ссылки на страницу и добавляет
заголовок текущей страницы на указанную страницу. Лучшее место для этого фрагмента кода — просто
перед сохранением текущей страницы. В модели простой текстовой страницы QuickiWiki это (sort
из) тривиальные:
1
42
НАСТРОЙКА ВАШЕЙ ВИКИ
если ( s / « ( $ link ) \ b / $ l / g ) {
открыть (Р, " » страниц / $ l ") или умереть "$1: $!";
print P "\n\n$page" ;
закрыть (П);
}
В примере сначала заменяется «другая страница» на «другая страница» в исходном коде, а затем добавляется
правило и имя текущей страницы в нижней части страницы OtherPage, на которую имеется обратная ссылка. Примечание
что если OtherPage не существует, она создается пустой, кроме ссылки — в этом хаке
также не отмечая в журнале недавние изменения.
Если ваша вики использует скрытые поля для хранения административной информации для каждой страницы,
код может быть немного более сложным, потому что вы должны сначала получить страницу и вставить
добавление в раздел «тело», а не просто прикрепить его к физическому концу файла.
Опять же, такие детали инкапсулированы (или должны быть) в подпрограммах, так что вы
не нужно было бы решать проблему напрямую. Код может выглядеть примерно так:
суб расширенные коды {
мой ($страница, $ds, $ts) =
местный $_ = $$страница{текст};
# передать ссылку на страницу, дату, время
# разыменован
# -v- автоматическая обратная ссылка, несколько экземпляров
мой @blkPg ; мой $blk = 0;
в то время как ( s / ( « ) ($LinkPattern) \b/$mark$blk$mark/ ) {
$blkPg[$blk++] = $2
}
мой %bp ; $blk = 0;
в то время как ( s/$mark$blk$mark/$blkPg[$blk]/g
%bp = &Получить страницу($blkPg[$blk]);
$bp{текст} .= "\n
\n$название М ;
&ReplacePage($blkPg[$blk++], \%bp);
}
) {