Ссылки задаются парой либо круглых, либо квадратных скобок. Ссылка кроме собственно страницы (локальной, URL, интервики и т. д.) может иметь также и название, которое будет отображаться в тексте вместо голого URL — название, как и в терминах и ассоциативных списках, отделяется от URL либо двойным «равно» ==, либо пробелом, если двойного «равно» не задано. ¶
При ссылках на локальные страницы можно использовать относительные пути как в обычных путях файловых систем: ¶
Часто «папки» на вики-сайте называют кластерами. В качестве разделителя пути можно использовать любой из слешей (прямой / или обратный \). ¶
* ((/ Главная страница)). * ((.. Содержимое верхнего кластера)). * [[..\WackoWiki Highlighters == Подсветчики WackoWiki]]. Естественно, пути на внешних сайтах остаются как есть: * ((http://google.com Внешняя ссылка)). * [[http://a-site/path\path\ Некий сайт]] |
Естественно, пути на внешних сайтах остаются как есть: ¶ |
Обычно к локальным ссылкам добавляется расширение файла (UWikiSettings->$linkExt). Папки определяются автоматически, и к ним оно не добавляется — но несмотря на это рекомендуется явно показывать, что это кластер, добавив в конец прямой или обратный слеш — особенно это удобно, когда ещё не все разделы созданы и ссылка без слеша в конце будет рассмотрена как ссылка на файл и к нему будет добавлено расширение. ¶
* ((. Начало раздела)); * ((..\ Основная секция)); * ((..\Classes Классы)); |
Интересная особенность в том, что если путь выходит за границы корневого пути (UWikiFilePager), то даже к папке без слеша в конце будет добавлено расширение — ведь не известно, папка ли это или файл, если они находятся за пределом корня документов: ¶
* ((../../../../.. Всё выше и выше...)); * ((../../../../../ А здесь расширение не добавлено)). |
В зависимости от темы оформления ссылки на несуществующие страницы и кластеры могут выделяться по-другому: ¶
* ((Несуществующая_страница)); * ((некая_страница#якорь)); * ((Syntax Эта страница существует)); * ((Syntax#Ссылки Она же, с якорем)); * ((Несуществующий_кластер/)); * ((несуществующая:интервики)). |
Внутри названия ссылки можно использовать любую строчную вики-разметку: ¶
* ((. == Содержание //этого// кластера)). * [[http://php.net/function.substr %%substr()%%]] |
Отменить создание ссылки можно тильдой: ¶
* ~((Не ссылка)), ~[[тоже не ссылка]]. * ((Ссылка с названием со ~)) скобками)). |
Обратите внимание, что при включении документа в другой с помощью Include
ссылки на вложенный документ будут скорректированы так, что они будут ссылаться не на
его отдельную страницу, а на его включённую копию. Тоже самое касается и якорных ссылок.
Также, относительные ссылки во включённых документах корректируются так, что продолжают
ссылаться на правильные страницы — относительно пути включённого, а не родительского, документа.
¶
Якоря ссылаются на конкретное положение на странице вместо ссылки на её верхнюю часть.
Задаётся якорь через решётку #. Якорь можно указывать и для внешних, и внутренних
адресов. При ссылке на якорь в текущем документе указывать страницу ни к чему — можно
сразу начинать с # (см. также Адресация в ссылках). Для внутренних ссылок регистр символов в имени якорей не важен.
Названия для ссылок задаются как обычно — через двойное равно == или пробел.
¶
* ссылка на раздел "((#Форматтеры форматтеры))" тут же. * а вот - на якорь в другом локальном документе: ((../Classes/UWikiSettings#Static methods == Статические методы класса %%UWikiSettings%%)). * ((http://uverse.i-forge.net/doc/#bottom Внешняя ссылка с якорем)) |
|
Обратите внимание, что в зависимости от настройки UWikiSettings->$inlineAnchors поведение якорной ссылки изменяется — она может создавать строчный якорь вместо ссылки на документ, если заглавие ссылки не задано явно — см. раздел о якорях. ¶
Ссылки могут указывать на внешний ресурс (когда указан протокол, например http://google.com) или на внутренний. Для обоих типов адресации существую свои правила адресации: ¶
Оба понятния обозначают краткие имена для адресации — вроде ярлыков на файлы. Интервики и цифрови́ки задаются в ссылке вместо адреса. ¶
* ((go:UverseWiki Искать UverseWiki в Гугле)); * ((ВП:wiki==Спросить о "вики" у Википедии)); * ((Codenet:#4444 Сообщение №4444 на CodeNet.ru)). |
Итак, интервики-адрес состоит двух частей, разделённых двоеточием: слева — краткое имя
ресурса, справо — собственно поисковая фраза или запрос. С цифрови́ки тоже самое,
только разделитель — :#, после которого идёт номер сообщения или ещё какой-то
идентификатор (обязательно цифра).
В остальном синтаксис тот же, что и при зщадании ссылок.
¶
Интервики задаются в файле interwiki.conf, а цифрови́ки — в numberlinks.conf. ¶
Внешние ссылки — это URL, содержащие имя протокола, например: http://i-forge.net, file:///usr/local/etc/svn-repos. Для внешних ссылок, в отличии от внутренних, существует всего два правила генерации автозаглавия, если оно не было задано в ссылке явно: ¶
При не заданном явно отображаемом названии для вики-ссылки и если включена настройка UWikiSettings->$fetchRemoteTitles (по умолчанию включена), вики-процессор попытается получить удалённый документ и прочитать заглавие из его тега <title>, расположенном внутри тега <head>. ¶
Если сервер отправит Content-Type в заголовках ответа, а также если установлен модуль iconv для PHP, то будет произведена конверсия заглавия в UTF-8. Если одно из условий не выполнено, iconv() вернула ошибку а также если полученное заглавие не находится в UTF-8, то этот метод не срабатывает и используются другие способы генерации автоназвания. ¶
Вики-процессор будет читать не более первых 4-х Кб удалённой страницы (значение по умолачнию настройки UWikiSettings->$fetchRemoteTitlesMaxSize) — если <title> не был найден в этом интервале либо тег <head> закрылся, этот метод определения не срабатывает. ¶
Примеры: ¶
* ((http://google.com)) * ((http://uverse.i-forge.net)) * ((http://not-existing-domain.net)) * ((http://www.google.ru/intl/en_com/images/srpr/logo1w.png)) |
Локальные ссылки имеют три части (возьмём для примера адрес форум:99#1.1-2): ¶
Любой компонент ссылки может отсутствовать, хотя по крайней мере один всегда задан. Примеры: ¶
((гугл:поиск)) - задана интервики "гугл" и путь "поиск". Наш ((форум:)) - задана только интервики "форум" без пути. ((/Главная#начало)) - задан путь "/Главная" и якорь "начало".
Кроме этого, ссылки могут содержать название, которое отделяется от собственно пути (страницы, на которую ссылаются) либо знаком двойного равно (==), либо пробелом, если такого знака нет. Если нет ни ==, ни пробела, ссылка считается заданной с пустым заглавием. Тоже самое происходит, если знак == стоит в конце ссылки и он не экранирован тильдой: ¶
((гугл:поиск)) - пустое заглавие. ((гугл:поиск заглавие)) - заглавие указано, разделитель - пробел. ((гугл:поисковая фраза==)) - пустое заглавие. См. ((Имя документа == здесь)) - пробелы вокруг "==" игнорируются. Разделитель - двойное равно (==), путь ссылки - "поисковая фраза": ((гугл:поисковая фраза==название))
Как было описано выше, локальная вики-ссылка состоит из частей, одна из которых — её название, которое отображается в тексте вместо адреса. Название может быть задано явно — с помощью разделителей (двойное равно, ==, или пробел), либо быть опущено — так называемое пустое заглавие. ¶
Заданное явно заглавие не изменяется и отображается как есть; пустое заглавие включает механизм автоподстановки: ¶
Пути локальных ссылок имеют 3 компонента — интервики, путь и якорь. Каждый из них может отсутствовать, но как минимум один всегда есть. ¶
При автоподстановке названия берётся самая значимая заданная часть пути ссылки и используется как отображаемое заглавие для неё. ¶
Значимость частей пути в порядке убывания следующая: ¶
При ссылках на локальный вики-документ (страницу или кластер) можно не указывать название для ссылки — в этом случае оно будет прочитано из документа (его заглавие), либо из заглавия файла-огловления кластера (см. This {{Action}} has wrong syntax and can't be executed.). ¶
Этот метод работает только для существующих и доступных (по правам доступа) документов — если это не так, либо документ/оглавление не содержит заглавия, то используются другие способы получения автоназвания для ссылки. ¶
Примеры: ¶
* ((Markers)), ((Line breaks==)) - по заглавию страницы. * ((.)), ((/Blog)) - по заглавию кластера. * ((Несуществующая_страница)), ((Неизвестный_формат.rar)). |
|
Как часто вам приходилось два раза писать имя страницы целиком и только менять окончание в её названии? Что ж, мы с этим встречались достаточно, поэтому добавили возможность быстрой замены окончания в ссылке (на интервики, страницу или якорь — см. компоненты ссылки) без повторного ввода всего её названия-пути. ¶
Для английского и других языков, мало использующих окончания, эта проблема практически
не стоит, а вот в русском окончания меняются в зависимости от фразы, то есть почти всегда
будут отличаться от утвердительной формы, используемой в заголовке или якоре.
В самом деле, не писать же на английский манер вместо См. раздел о ((якорях)) что-то
вроде См. раздел "((Якори))" из-за того, что надоедает каждый раз писать ((якори якорях)).
¶
Замена окончания делается с помощью значка «плюс» (+), поставленного внутри адреса. Проще всего его поведение объяснить на примерах: ¶
* См. раздел о ((#якор+и))ях. - Идентично написанию "...о ((#якори якорях))." * На нашей ((стен+а))е чего только не понаписано... - Идентично "На нашей ((стена стене))..." * Давайте ((игра+))ть! - Эквивалентно "Давайте ((игра играть))!" * Стреляйте, братец, там ваш ((враг+и)). - Тоже самое, что и "...ваш ((враги враг))." * ((#Якор+я))ная ссылка. * Ссылка на раздел с ((функция+:))ми. - Тоже самое, что и "...с ((функция: функциями))." |
|
Схематично это выглядит так: ((ссылка+окончание_ссылки))окончание_названия. Указано может быть либо окончание ссылки, либо названия, либо оба, но не ни одного. Кроме этого, окончание заменяется не обязательно в последнем слове — это может быть любое слово: ¶
Это указано в описании ((Функци+и обработки строк))й. - эквивалентно "((Функции обработки строк==Функций обработки строк))". |
Это указано в описании обработки строкй. — эквивалентно «Функций обработки строк». ¶ |
Слишком длинные окончания игнорируются во избежание ложных срабатываний — зависит от настройки UWikiSettings->$longestLinkEnding, по-умолчанию 3 символа. Наличие нескольких неэкранированных плюсиков также приводит к его игнорированию для всей ссылки: ¶
* рабочая ссылка с заменённым ((окончание+))м; * тоже рабочая ссылка с ((оконча+ние))м; * а у этой окончание уже не распознано: ((оконч+ание))м; * тоже самое здесь: ((окончание+))мммм. * ((Од+ин дв+а))три. |
|
Замена окончаний работает только для внутренних адресов и ссылок без явно указанных названий: ¶
* ((http://google.co+m)); * ((Ссылка Заголово+к)). * ((Ссылка == Заголово+к)). |
Отменить замену окончания можно просто указав название ссылки явно, либо если замена нужна, но перед ней находится плюсик, можно его отменить тильдой: ¶
* ((Ссыл+ка==Ссылка)); * ((Ссылка+ Ссылка)) - пробел также разделяет адрес и название; * ((Нек~+ая ссылк+а==))и. * ((Нек~+ая ссылка==)) - а здесь и так всего один плюсик. |
|