Magento:如何在升级脚本中获取特定商店的根类别 ID?
Magento: How to get the root category id for a specific store in an upgrade script?
如何在 Magento 1.9 更新脚本中获取根类别?
Find root category of store 提出了一个解决方案,但我在 运行 执行脚本后收到错误消息:
Mage registry key "controller" already exists
...还有踪迹:
#0 /var/www/instances/global/app/Mage.php(223): Mage::throwException('Mage registry k...')
#1 /var/www/instances/global/app/code/core/Mage/Core/Model/App.php(762): Mage::register('controller', Object(Mage_Core_Controller_Varien_Front))
#2 /var/www/instances/global/app/code/core/Mage/Core/Model/App.php(1113): Mage_Core_Model_App->_initFrontController()
#3 /var/www/instances/global/app/code/core/Mage/Core/Controller/Varien/Front.php(344): Mage_Core_Model_App->getFrontController()
#4 /var/www/instances/global/app/code/core/Mage/Core/Controller/Varien/Front.php(161): Mage_Core_Controller_Varien_Front->_checkBaseUrl(Object(Mage_Core_Controller_Request_Http))
#5 /var/www/instances/global/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#6 /var/www/instances/global/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#7 /var/www/instances/global/index.php(118): Mage::run('', 'store')
#8 {main}
我的脚本首先调用 Mage::init,然后尝试读取商店的根类别名称。
Mage::init();
Mage::app()->getStore(3)->getRootCategoryId();
错误信息似乎很常见; Mage registry key "controller" already exists 表示 Mage::run 可能已经 运行 两次。
因此我假设 Mage::init 也不应该被调用两次,并且可能会在我的更新脚本被调用后再次被调用 - 这可能会导致我的错误消息。所有假设。
我能做什么?省略 Mage::init()?但是,我没有得到根 ID。销毁 Mage::init() 创建的对象?怎么样?
我们有很多类型可以访问根类别id。
1- Mage::app()->getStore($storeId)->getRootCategoryId();
2- Mage::app()->getStore()->getRootCategoryId();
3-
$store = Mage::getModel('core/store')->load(Mage_Core_Model_App::DISTRO_STORE_ID);
$categoryId = $store->getRootCategoryId();
升级脚本(安装程序)中不需要 Mage::init();
或 Mage::run();
!
省略Mage::init();
后仍然可以得到root id
此代码并不优雅,但不需要 Mage::init() 调用,因此可以在 Magento 升级脚本中调用:
$myStoreId = 4;
$myStoresRootCategoryId = null;
foreach (Mage::app()->getStores() as $store) {
$storeId = $store->getId();
$rootCategoryId = $store->getGroup()->getRootCategoryId();
if ($storeId == $myStoreId) {
$myStoresRootCategoryId = $rootCategoryId;
}
}
如何在 Magento 1.9 更新脚本中获取根类别?
Find root category of store 提出了一个解决方案,但我在 运行 执行脚本后收到错误消息:
Mage registry key "controller" already exists
...还有踪迹:
#0 /var/www/instances/global/app/Mage.php(223): Mage::throwException('Mage registry k...')
#1 /var/www/instances/global/app/code/core/Mage/Core/Model/App.php(762): Mage::register('controller', Object(Mage_Core_Controller_Varien_Front))
#2 /var/www/instances/global/app/code/core/Mage/Core/Model/App.php(1113): Mage_Core_Model_App->_initFrontController()
#3 /var/www/instances/global/app/code/core/Mage/Core/Controller/Varien/Front.php(344): Mage_Core_Model_App->getFrontController()
#4 /var/www/instances/global/app/code/core/Mage/Core/Controller/Varien/Front.php(161): Mage_Core_Controller_Varien_Front->_checkBaseUrl(Object(Mage_Core_Controller_Request_Http))
#5 /var/www/instances/global/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#6 /var/www/instances/global/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#7 /var/www/instances/global/index.php(118): Mage::run('', 'store')
#8 {main}
我的脚本首先调用 Mage::init,然后尝试读取商店的根类别名称。
Mage::init();
Mage::app()->getStore(3)->getRootCategoryId();
错误信息似乎很常见; Mage registry key "controller" already exists 表示 Mage::run 可能已经 运行 两次。
因此我假设 Mage::init 也不应该被调用两次,并且可能会在我的更新脚本被调用后再次被调用 - 这可能会导致我的错误消息。所有假设。
我能做什么?省略 Mage::init()?但是,我没有得到根 ID。销毁 Mage::init() 创建的对象?怎么样?
我们有很多类型可以访问根类别id。
1- Mage::app()->getStore($storeId)->getRootCategoryId();
2- Mage::app()->getStore()->getRootCategoryId();
3-
$store = Mage::getModel('core/store')->load(Mage_Core_Model_App::DISTRO_STORE_ID);
$categoryId = $store->getRootCategoryId();
升级脚本(安装程序)中不需要 Mage::init();
或 Mage::run();
!
省略Mage::init();
此代码并不优雅,但不需要 Mage::init() 调用,因此可以在 Magento 升级脚本中调用:
$myStoreId = 4;
$myStoresRootCategoryId = null;
foreach (Mage::app()->getStores() as $store) {
$storeId = $store->getId();
$rootCategoryId = $store->getGroup()->getRootCategoryId();
if ($storeId == $myStoreId) {
$myStoresRootCategoryId = $rootCategoryId;
}
}