2012-06-19 28 views

回答

0

要獲得當前商店的詳細信息,請使用下面的代碼。

$store = Mage::app()->getStore(); 
$name = $store->getName(); 
6

謝謝大家,

我想分享我的調查結果:

  1. 的index.php呼籲Mage::run()
  2. 它調用應用程序/ mage.php :: run()的
  3. 運行功能有self::$_app->run(...)最後呼籲的代碼行Mage_Core_Model_App::run()功能
  4. Mage_Core_Model_App::run()包括$this->_initCurrentStore($scopeCode, $scopeType);
  5. _initCurrentStore() ::使用_initStores()方法將所有網站,組和商店加載到網站,組和商店對象。此功能檢查該網站是網站還是商店組或商店,如果它是一個,那麼它在那裏設置當前商店。如果範圍是基數,那麼它會通過$this->_checkCookieStore()
  6. $this->_checkCookieStore() ::這將從Cookie $this->getCookie()->get(Mage_Core_Model_Store::COOKIE_NAME);獲取商店類型,它會根據cookie返回的值檢查它是網站,組還是存儲並設置當前店鋪爲$this->_currentStore = $store;
  7. Mage_Core_Model_App::_checkGetStore(),這個檢查目前店內與xpath_of_store_url,更新使用網站

當前語言環境時Mage_Core_Model_App::init()被稱爲設置,init()函數具有$this->_initEnvironment();具有區域

1

的設置如果「添加存儲代碼到Url「設置,然後 Magento也根據商店代碼存在於url中檢測商店。 例如domain.com/en/ 它在Mage_Core_Controller_Request_Http :: setPathInfo()

所以實現按優先順序(勝最低)Magento會用以下數據來檢測店:

  1. 檢查,如果URL中包含存儲代碼 - >使用
  2. 檢查,如果有店鋪cookie設置
  3. 使用$ _ SERVER [「MAGE_RUN_CODE」]和$ _ SERVER [「MAGE_RUN_TYPE」]從默認存儲組
  4. 獲取默認存儲,並且默認存儲組 從默認網站
0

我正在學習magento certifcation考試,我也不是100%確定地區的回答。我在網上的搜索表明,廣泛接受的答案是:

當調用Mage_Core_Model_App :: init()時設置當前語言環境,init()函數具有$ this - > _ initEnvironment();其中有一個場景設置

似乎某人有人說,每個人都只是複製,但我不知道它是正確的。請參閱Mage_Core_Model_Locale :: __ construct()中的區域設置,但在$ this - > _ initEnvironment()中未調用此構造,因爲在此方法中,Mage_Core_Model_Locale僅用作靜態類。所以這不應該得到的結構運行:

protected function _initEnvironment() 
{ 
    $this->setErrorHandler(self::DEFAULT_ERROR_HANDLER); 
    date_default_timezone_set(Mage_Core_Model_Locale::DEFAULT_TIMEZONE); 
    return $this; 
} 

看來,這個功能只能使用從Mage_Core_Model_Locale的常量,以設置時區。時區與區域設置不同。

但是,在Mage_Core_Model_App中,函數getLocale()會正確地實例化區域設置,它應該使構造函數運行,因此運行Mage_Core_Model_Locale :: setLocale。

Mage_Core_Model_App

public function getLocale() 
{ 
    if (!$this->_locale) { 
     $this->_locale = Mage::getSingleton('core/locale'); 
    } 
    return $this->_locale; 
} 

Mage_Core_Model_Locale

public function __construct($locale = null) 
{ 
    $this->setLocale($locale); 
} 

public function setLocale($locale = null) 
{ 
    if (($locale !== null) && is_string($locale)) { 
     $this->_localeCode = $locale; 
    } else { 
     $this->_localeCode = $this->getDefaultLocale(); 
    } 
    Mage::dispatchEvent('core_locale_set_locale', array('locale'=>$this)); 
    return $this; 
} 

編輯:

,而我在這,我決定正前方去驗證,如果我是正確與否。要做到這一點,我添加

mageDebugBacktrace(); die(); 

到法師核心語言環境模型的setLocale()方法。 此方法是當Locale模型在_localeCode屬性上設置值時。換句話說,這是當locale設置的時候。回溯將向我們展示導致它的方法的調用鏈。

結果是這樣的:

[1] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/Locale.php:94 
[2] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/Config.php:1348 
[3] /var/www/magento/htdocs/app/Mage.php:463 
[4] /var/www/magento/htdocs/app/Mage.php:477 
[5] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/App.php:1018 
[6] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/Translate.php:347 
[7] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/Translate.php:179 
[8] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/Translate.php:119 
[9] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/App/Area.php:146 
[10] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/App/Area.php:121 
[11] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/App/Area.php:93 
[12] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/App.php:774 
[13] /var/www/magento/htdocs/app/code/core/Mage/Core/Controller/Varien/Action.php:512 
[14] /var/www/magento/htdocs/app/code/core/Mage/Core/Controller/Front/Action.php:64 
[15] /var/www/magento/htdocs/app/code/core/Mage/Core/Controller/Varien/Action.php:407 
[16] /var/www/magento/htdocs/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:250 
[17] /var/www/magento/htdocs/app/code/core/Mage/Core/Controller/Varien/Front.php:172 
[18] /var/www/magento/htdocs/app/code/core/Mage/Core/Model/App.php:354 
[19] /var/www/magento/htdocs/app/Mage.php:684 
[20] /var/www/magento/htdocs/index.php:87 

你可以看到線18應用示範線354是這樣的代碼:

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

這是在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; 
    } 

左右)的整體思路是,語言環境中_initEnvironment(),它是在baseInit的開始調用(設置不正確。也許有人會感到困惑,不知道「默認時區」和「區域設置」之間的區別,但它絕對不是一回事!