Php Magento:如何在升级脚本中获取特定存储的根类别id?

Php Magento:如何在升级脚本中获取特定存储的根类别id?,php,magento,magento-1.9,Php,Magento,Magento 1.9,如何在Magento 1.9更新脚本中获取根类别 提出了一个解决方案,但在运行脚本后,我收到一条错误消息: 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/C

如何在Magento 1.9更新脚本中获取根类别

提出了一个解决方案,但在运行脚本后,我收到一条错误消息:

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::run可能已运行两次

因此,我假设Mage::init也不应该被调用两次,并且可能在调用我的更新脚本之后再次被调用——这可能会导致我的错误消息。所有假设


我能做什么?是否省略Mage::init()?但是,我没有获得根id。是否销毁由Mage::init()创建的对象?如何访问?

我们有许多类型可以访问根类别id

1-
Mage::app()->getStore($storeId)->getRootCategoryId()

2-
Mage::app()->getStore()->getRootCategoryId()

3-


您不需要
Mage::init()
Mage::run()在升级脚本中(安装程序)


省略
Mage::init()后仍然可以获取根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 SE站点。感谢您的提示-我不知道它存在。下一次!感谢分享-我已经尝试了这些:1-没有Mage::init()就无法工作,始终为所有门店返回相同的根类别id 2-返回当前选定门店的根类别,但不返回特定门店的根类别3-与1相同如何获取选定门店id产品,我的代码,当我使用此代码时,将显示我的所有产品,如何为所选商店产品列表添加筛选器。如果不使用Mage::init(),代码将为系统中的所有商店返回相同的根类别id。
$myStoreId = 4;
$myStoresRootCategoryId = null;
foreach (Mage::app()->getStores() as $store) {
    $storeId = $store->getId();
    $rootCategoryId = $store->getGroup()->getRootCategoryId();
    if ($storeId == $myStoreId) {
        $myStoresRootCategoryId = $rootCategoryId;
    }
}