Данный файл описывает настройки для различных хостов. Хост определяется следующими параметрами:
В sites.xml вы можете описать сразу несколько сайтов, например обычную и мобильную версию. Соответственно в pages.xml для разных сайтов будет применятся свой набор правил.
Сайт определяется путем xpath запроса к скомпилированному файлу sites.xml (с учетом наследований и переопределений), в котором указаны текущие hostname, webroot, port и protocol. Если сайт не определился, то на экране вы увидите ошибку 501 Not Implemented. Если сайт определился, то происходит инициализация pages.xml и обработка текущего url.
<sites> <!-- Site Description @name: site name, required @extends: extends settings from existing site --> <site name="" extends=""> <!-- Site Settings --> <settings> <!-- Paths Settings --> <paths> <!-- Path @name: the virtual path name, required @value: the relative path, required --> <path name="" value="" /> </paths> <!-- System modules Settings --> <modules> <errorReporting /> <localization /> <mailFactory /> </modules> <!-- Database Settings --> <databases> <!-- Database @name: database alias, required, default is "default", must be default or empty if one database is selected @driver: database type, required (pgsql|mysql) --> <database name="" driver=""> <!-- Database name, required --> <name /> <!-- Database username, required --> <user /> <!-- Database password, default is emptu--> <password /> <!-- Database hostname, default is localhost--> <hostname /> </database> </databases> </settings> <!-- Hosts Settings --> <hosts> <!-- Host name: host alias, required --> <host name=""> <!-- Host address, 1 hostname required (multiple support) --> <hostname></hostname> <hostname></hostname> <hostname></hostname> <hostname></hostname> <!-- Host port, default is 80 --> <port></port> <!-- Host protocol, default is http --> <protocol></protocol> <!-- Host webroot, default is null--> <webroot></webroot> <!-- Host by default, default is false --> <default></default> <!-- Overrided settings from main "site settings" section TODO: autocopy from main site settings and merge with overrided settings (like dublicate settings for every host if overrided settings isn't empty ) --> <settings> <databases> <database name="whoopass" driver=""> <name>whooapss_devel</name> </database> </databases> </settings> </host> </hosts> </site> </sites>
Иногда задача стоит таким образом, что без использования поддоменов не обойтись, например обработка <username>.mysite.ru Если в теге <hostname> будет стоят символ *, то возьмется именно он, если больше подходящих нет. Помните, что * может использоваться только один раз и только в самом конце файла sites.xml.
Рассмотрим пример обработки таких ситуаций:
<host name="any"> <hostname>*</hostname> <settings> <modules> <anySiteManager class="AnySiteManager" /> </modules> </settings> </host>
В модуле AnySiteManager можно переопределить текущее соединение с БД по умолчанию или, скажем, некоторые пути.
<?php class AnySiteManager { public static function Init( DOMNodeList $params ) { if ( ConnectionFactory::Remove() ) { ConnectionFactory::Add( array( 'driver' => 'MySql' , 'dbname' => 'default_connection' )); } Site::$Paths['daemons://'] = '/int/mydaemons/daemons'; } } ?>
Работает аналогично глобальному обработчику для неопределенного сайта, только с поддержкой поддоменов.
Можно использовать как: *.test.site.ru или *.site.ru, главное соблюдать последовательность в sites.xml.