Смерессылки
Говоря об адресации документов в Смереке, прежде всего следует отчетливо различить непосредственные (или прямые) ссылки на другие документы и абстрагированные ссылки, или смерессылки(смерессылка – существительное женского рода, образованное от Smereka reference; следовательно, «нет смерессылки», «придаем значение смерессылке» и т.д.)
Если нужно сделать ссылку на другой сайт, нет другого выхода, как использовать прямую ссылку: <a href="http://example.com">Exapmle</a>.
Но если надо сослаться на другой документ того же сайта (на другую вершину дерева Смереки), можно использовать как прямые ссылки, так и смерессылки.
Пусть наше дерево документов имеет вид (в скобках – иди вершин):
ThePope [1]
Was [2]
MoscowPatriarchate [10]
Is [3]
Autocefalic [11]
Have [4]
TheDog [12]
WillBe [5]
Atheist [13]
Теперь мы можем употреблять в документах Смереки абсолютные ссылки:
<a href="http://example.com/index.php?Node=12">Pope and Dog story</a>
(с использованием числовой адресации);
<a href="http://example.com/index.php?Path=ThePope/Have/TheDog">Pope and Dog story</a>
(с использованием символьной адресации);
<a href="http://example.com/ThePope/Have/TheDog">Pope and Dog story</a>
(с использованием виртуальной адресации);
Все эти ссылки являются абсолютными в том смысле, что Смерека ничего не будет с ними делать и включить в текст окончательного HTML документа так, как они записаны.
Вместо этих ссылок можно использовать смерессылку вида:
<Smereka Func="Smeref" NodeId="12">Pope and Dog story</Smereka>
Этот код задает смеретег, или поле подстановки, которое транслируется Смерекой в одну из приведенных выше абсолютных форм. Какую именно форму сгенерирует Смерека – зависит от контекста. В режиме редактирования Смерека везде использует числовую адресацию, которая является внутренним стандартом Смереки. Что же касается режима просмотра, предназначенного для внешних пользователей, то форма ссылки определяется параметром $URLMode в файле customsettings.php. Этот параметр может иметь значение 'ById', 'ByPath', 'Virtual'.
Числовая адресация рассчитана в основном на режим отладки. Если все работает хорошо, ее можно изменить на символьную или виртуальную.
Смерессылки используются не только в форме полей подстановки; Смерека генерирует их, когда формирует такие компоненты как навигаторы или агрегаторы. Следовательно, их поведение тоже зависит от параметра $URLMode.
Виртуальная адресация
Этот способ адресации будет работать только совместно с соответственно настроенными правилами перезаписи адресов (mod_rewrite в Apache). Следует знать, что числовые и символьные адреса остаются действительными и при виртуальной адресации.
Виртуальная адресация накладывает очень небольшие ограничения на конфигурацию физических каталогов веб-сайта:
1. В корневом каталоге не должно быть других файлов, кроме index.php и .htaccess. Точнее, прочие файлы могут быть, но они не будут доступны через http протокол через действие перезаписи адресов.
2. В корневом каталоге следует создать каталог files, в котором можно размещать различные файлы, которые должны быть доступны через http протокол (в этом каталоге перезапись адресов не работает, если только не сделаны специальные настройки).
3. В дереве документов нельзя давать символьное имя files вершинам, которые непосредственно подчинены корневой вершине домена или субдомена. (Символьные имена чувствительны к регистру, поэтому Files является допустимым; но мы же не хотим сами создавать путаницу…)
При таких условиях трансляция внешних виртуальных адресов выглядит довольно просто:
http://example.com/en/ThePope/Have/TheDog
транслируется в:
http://example.com/index.php?Lang=en&Path=ThePope/Have/TheDog
Адрес:
http://example.com/ThePope/Have/TheDog
транслируется в:
http://example.com/index.php?Lang=uk&Path=ThePope/Have/TheDog
В последнем случае, когда виртуальный каталог нулевого уровня не задает языковую версию, употребляется язык Смереки по умолчанию (обычно это украинский язык).
Следует помнить, что для Смереки нет разницы между файлом и каталогом: есть вершина, которая одновременно владеет информацией, как файл, и подчиненными вершинами, как каталог. Поэтому известная проблема «последней косой черты (/)» для нее не актуальна. Адреса вида http://example.com/ThePope/Have/TheDog (где TheDog является как бы файлом) и http://example.com/ThePope/Have/TheDog/ (где TheDog является как бы каталогом) обрабатываются одинаково и указывают на одну и ту же вершину. Попросту говоря, Смерека игнорирует последнюю косую черту в URL.
Расширение по умолчанию
Смерека для своей работы не требует, чтобы символьное имя вершины содержало расширение (такое как TheDog.html или TheDog.php. Но такие расширения могут использоваться.
Если расширение задано непосредственно в поле символьного имени вершины, оно всегда будет отображаться в пути. Соответственно адрес такой страницы должна содержать это расширение.
Если поле символьного имени не содержит расширения, то Смерека может добавить его сама, чтобы сделать для читателя вид, что он читает (например) статический .html файл.
Для этого надо задать переменную $ DefaultExt в файле customsettings.php, например:
$ DefaultExt = 'html';
Это расширение по умолчанию автоматически присоединяется к имени терминальной вершины, а при интерпретации пути отвергается. Таким образом, если символьное имя вершины – TheDog (без расширения), то адреса http://example.com/ThePope/Have/TheDog и http://example.com/ThePope/Have/TheDog.html будут указывать на один документ. Конечно, лучше придерживаться определенной дисциплины, и если употреблять расширение по умолчанию, то принимать его везде, чтобы не путать поисковые машины мнимым удвоением документов.