Формирование полных url-адресов
Функционал формирования полных адресов сайта актуален для многих задач - формирование sitemap, валидация url в роутинге и тд. Особенно тонким моментом является поддержка протокола https. Для формирования url-адресов в TAO реализовано соответствующее API, которое требует определенной настройки.
Настройки основного хоста и протокола для сайта
В некоторых случаях использовать текущий протокол и хост неправильно или невозможно: у CLI-скриптов, например, вообще нет риквеста (request), откуда их можно было бы достать, да и не всегда нужно использовать текущий хост. Поэтому очень важна правильная настройка этих параметров в конфигурационном файле. Она будет отличаться для моно- и мультиязычных сайтов.
Для моноязычных сайтов
Для моноязычного сайта или в случае, когда протокол у сайта один для всех языков, указывать данные следует в конфигурационном файле сайта:
// config/site.php ... ->begin_site ->host('example.ru') ->protocol('https') ->end ...
Для мультиязычных сайтов
Для мультиязычного сайта имя хоста и протокол нужно указывать в массиве настройки модуля Lang:
// app/config/modules.php return array( 'CMS.Lang' => array( 'ru' => array( 'caption' => 'Русский', 'alias' => array('ru'), 'host' => 'example.ru', 'protocol' => 'https', ), 'en' => array( 'caption' => 'English', 'alias' => array('en'), 'host' => 'example.com', 'protocol' => 'http' ), ), );
Общая логика получения данных настроек
Приоритеты получения параметров host
, protocol
:
1. Настройки из модуля CMS.Lang
(которые задаются в app/config/modules.php).
2. Настройки приложения (config/site.php).
3. Из текущего запроса, если он есть (не CLI).
4. Протокол по умолчанию - http. Если имя хоста не было получено способами выше, то будет CMS_Exception
.
Как видно по описанию выше, для CLI-скриптов единственным источником получения параметров является файлы настроек. Т.к. CLI-скрипты довольно часто используются, например, для формирования SitemapXML, формирования писем для рассылки и т.д., то очень важно не забывать добавлять данные настройки.
API для формирования url
В классе CMS для работы с урлами есть следующие методы:
-
site_host($lang)
- возвращает имя хоста для указанного языка ($lang
). Язык является необязательным параметром, если его опустить, то получим имя хоста для текущего языка (для дефолтного, если из консоли).
-
site_protocol($lang)
- аналогично вышеуказанной функции, возвращает протокол сайта.
-
full_url($url, $host, $protocol, $lang)
- возвращает полную ссылку с протоколом и именем хоста,$url
- обязательный параметр, остальные нет. Если$host
и$protocol
не указаны и$url
является относительной ссылкой, то в результирующей ссылке будут подставлены имя хоста и протокол сайта, если$url
содержит протокол и / или имя хоста - эти параметры не изменятся. Если$host
и$protocol
указаны, то они будут подставлены в результирующую ссылку.
-
build_url($url_chunks)
- обратная функция кparse_url
(собирает ссылку из массива).
CMS::site_host('ru'); CMS::site_protocol('ru'); CMS::full_url('/about/'); CMS::full_url('/about/', false, false, 'ru');