Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Magento. Процесс загрузки конфигурационных файлов

Anna | 31.05.2014 | нет комментариев

Добрый день, програсообщество.
Это моя первая статья, следственно не судите сурово. Несколько лет я занимаюсь разработкой интернет магазинов на базе Magento. За это время у меня накопилось много информации касательно работы данной платформы, которую немыслимо постоянно удерживать в голове, следственно я решил структурировать ее в виде серии статей.
Кому увлекательно, добродушно пожаловать под кат.

Всякое обращение к страницам в интернет магазине на базе Magento начинается с обработки index.php. В данном файле производится первичная проверка, в том числе версии PHP, объявляются константы и подключается файл Mage.php с базовым классом Mage. Данный класс реализует уйма увлекательных способов, которые будут рассмотрены в дальнейших статья, а на данный момент нас волнует способ
run, отвечающий за запуск магазина. Дабы осознать, как происходит загрузка конфигурационных файлов, разглядим данный способ:

self::$_app = new Mage_Core_Model_App();
if (isset($options['request'])) {
     self::$_app->setRequest($options['request']);
}
if (isset($options['response'])) {
     self::$_app->setResponse($options['response']);
}
self::$_events = new Varien_Event_Collection();
self::_setIsInstalled($options);
self::_setConfigModel($options);
self::$_app->run(array(
     'scope_code' => $code,
     'scope_type' => $type,
     'options'    => $options,
));

Видно, что в способе создается новейший класс Mage_Core_Model_App и для него вызывается способ run, где и происходит вызов способов изначальной загрузки конфигурационных файлов.

Разглядим данный способ:

public function run($params)
    {
        $options = isset($params['options']) ? $params['options'] : array();
        $this->baseInit($options);
        Mage::register('application_params', $params);

        if ($this->_cache->processRequest()) {
            $this->getResponse()->sendResponse();
        } else {
            $this->_initModules();
            $this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);

            if ($this->_config->isLocalConfigLoaded()) {
                $scopeCode = isset($params['scope_code']) ? $params['scope_code'] : '';
                $scopeType = isset($params['scope_type']) ? $params['scope_type'] : 'store';
                $this->_initCurrentStore($scopeCode, $scopeType);
                $this->_initRequest();
                Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
            }

            $this->getFrontController()->dispatch();
        }
        return $this;
    }

Способ baseInit отвечает за инициализацию свойства _config и загрузку базовых конфигураций. Базовая конфигурация загружается в способе _initBaseConfig, тот, что в последующем вызывает loadBase способ из класса Mage_Core_Model_Config.
Способ loadBase парсит и сберегает в качество _xml объекта Mage_Core_Model_Config данные из файлов app/etc/local.xml и app/etc/config.xml. В данных файлах содержатся доступы к БД и базовые настройки интернет магазина.
Позже чего происходит загрузка конфигурационных файлов модулей. За это отвечает способ _initModules, тот, что, в свою очередь, вызывает способ loadModules из класса Mage_Core_Model_Config.
Для загрузки конфигурационных файлов модулей вначале загружается список всех файлов из папки app/etc/modules и производится разбор этих файлов. За это отвечает способ _loadDeclaredModules. В способе loadModules производится обработка только 3 типов файлов из папки etc в директории модуля:

  • 1. confix.xml
  • 2. config.{resource_name}.xml (в нашем случае config.mysql4.xml)
  • 3. local.xml

Для загрузки первых 2-х типов вызывается способ loadModulesConfiguration, которому в качестве $fileName передается массив с именами файлов (config.xml и config.mysql4.xml)
image
Дальше производится парсинг и загрузка данных в качество _xml для всех энергичных модулей:

$modules = $this->getNode('modules')->children();
foreach ($modules as $modName=>$module) {
    if ($module->is('active')) {
        if ($disableLocalModules && ('local' === (string)$module->codePool)) {
            continue;
        }
        if (!is_array($fileName)) {
            $fileName = array($fileName);
        }
        foreach ($fileName as $configFile) {
            $configFile = $this->getModuleDir('etc', $modName).DS.$configFile;
            if ($mergeModel->loadFile($configFile)) {
                $mergeToObject->extend($mergeModel, true);
            }
        }
    }
}

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB