Содержание

sites.xml

Данный файл описывает настройки для различных хостов. Хост определяется следующими параметрами:

В 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';
        }
    }
?>

Поддержка поддоменов *.hostname

Работает аналогично глобальному обработчику для неопределенного сайта, только с поддержкой поддоменов.

Можно использовать как: *.test.site.ru или *.site.ru, главное соблюдать последовательность в sites.xml.