これは私の最初の記事なので、厳密に判断しないでください。 ここ数年、Magentoをベースにしたオンラインストアを開発しています。 この間、私はこのプラットフォームの作業に関する多くの情報を蓄積してきましたが、それは私の頭の中に永久に保管することはできません。そこで、一連の記事で構成することにしました。
誰も気にしない、猫へようこそ。
Magentoベースのオンラインストアのページへのアクセスは、index.phpの処理から始まります。 このファイルでは、PHPバージョンを含む初期チェックが実行され、定数が宣言され、Mage基本クラスを持つMage.phpファイルが接続されます。 このクラスは多くの興味深いメソッドを実装します。これについては後続の記事で説明しますが、現時点ではメソッドに興味があります
実行、ストアの起動を担当。 構成ファイルのロード方法を理解するには、次の方法を検討してください。
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メソッドにロードされ、その後、Mage_Core_Model_ConfigクラスからloadBaseメソッドが呼び出されます。
loadBaseメソッドは、ファイルapp / etc / local.xmlおよびapp / etc / config.xmlのデータを解析し、Mage_Core_Model_Configオブジェクトの_xmlプロパティに保存します。 これらのファイルには、オンラインストアのデータベースおよび基本設定へのアクセスが含まれています。
その後、モジュールの構成ファイルがロードされます。 _initModulesメソッドがこれを担当し、Mage_Core_Model_ConfigクラスからloadModulesメソッドを呼び出します。
モジュールの構成ファイルをダウンロードするには、まずapp / etc / modulesフォルダーからすべてのファイルのリストがロードされ、これらのファイルが解析されます。 _loadDeclaredModulesメソッドがこれを担当します。 loadModulesメソッドは、モジュールディレクトリのetcフォルダーから2種類のファイルのみを処理します。
- 1. confix.xml
- 2. config。{Resource_name} .xml(この場合、config.mysql4.xml)
それらをロードするには、loadModulesConfigurationメソッドが呼び出され、ファイル名(config.xmlおよびconfig.mysql4.xml)の配列が$ fileNameとして渡されます

次に、すべてのアクティブモジュールのデータを解析して_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); } } } }
local.xmlファイルを使用して、オンラインストアの基本構成に変更を加えることができます。
これで設定のダウンロードが完了し、切り替えたページのルーターに応じて、対応するプロセスが開始されます。
ご清聴ありがとうございました。喜んでご批判をお待ちしております。