<<Другая страница

Совет 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);

}

) {