Здесь показаны различия между двумя версиями данной страницы.
Следущая версия | Предыдущая версия | ||
eaze:sites.xml [2011/09/11 23:50] sergeyfast создано |
eaze:sites.xml [2012/12/13 22:20] (текущий) sergeyfast |
||
---|---|---|---|
Строка 9: | Строка 9: | ||
Сайт определяется путем xpath запроса к скомпилированному файлу sites.xml (с учетом наследований и переопределений), в котором указаны текущие hostname, webroot, port и protocol. Если сайт не определился, то на экране вы увидите ошибку 501 Not Implemented. Если сайт определился, то происходит инициализация pages.xml и обработка текущего url. | Сайт определяется путем xpath запроса к скомпилированному файлу sites.xml (с учетом наследований и переопределений), в котором указаны текущие hostname, webroot, port и protocol. Если сайт не определился, то на экране вы увидите ошибку 501 Not Implemented. Если сайт определился, то происходит инициализация pages.xml и обработка текущего url. | ||
+ | |||
+ | ===== Описание настроек сайтов ===== | ||
+ | <code xml> | ||
+ | <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> | ||
+ | </code> | ||
+ | |||
+ | ===== Глобальный обработчик для неопределенного сайта ===== | ||
+ | Иногда задача стоит таким образом, что без использования поддоменов не обойтись, например обработка <username>.mysite.ru | ||
+ | Если в теге <hostname> будет стоят символ *, то возьмется именно он, если больше подходящих нет. | ||
+ | Помните, что * может использоваться только один раз и только в самом конце файла sites.xml. | ||
+ | |||
+ | Рассмотрим пример обработки таких ситуаций: | ||
+ | |||
+ | <code xml> | ||
+ | <host name="any"> | ||
+ | <hostname>*</hostname> | ||
+ | <settings> | ||
+ | <modules> | ||
+ | <anySiteManager class="AnySiteManager" /> | ||
+ | </modules> | ||
+ | </settings> | ||
+ | </host> | ||
+ | </code> | ||
+ | |||
+ | В модуле AnySiteManager можно переопределить текущее соединение с БД по умолчанию или, скажем, некоторые пути. | ||
+ | <code php> | ||
+ | <?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'; | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | </code> | ||
+ | |||
+ | ===== Поддержка поддоменов *.hostname ===== | ||
+ | Работает аналогично глобальному обработчику для неопределенного сайта, только с поддержкой поддоменов. | ||
+ | |||
+ | Можно использовать как: *.test.site.ru или *.site.ru, главное соблюдать последовательность в sites.xml. | ||
+ | |||