2017-01-30 3 views
0

Как получить корневую категорию в сценарии обновления Magento 1.9?Magento: Как получить идентификатор корневой категории для определенного хранилища в сценарии обновления?

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 также не следует вызывать дважды и, возможно, вызывается снова после вызова моего скрипта обновления, и это может вызвать мое сообщение об ошибке. Все предположения.

Что мне делать? Omit Mage :: init()? Но тогда я не получаю идентификатор корня. Уничтожить объекты, созданные Mage :: init()? Как?

+0

Это лучше подходит для сайта Magento SE. – webnoob

+0

Спасибо за подсказку - я не знал, что она существует. В следующий раз! – dani

ответ

0

У нас есть много типов для доступа к идентификатору корневой категории.

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(); 
+0

Спасибо за обмен: я уже пробовал: 1 - не работает без Mage :: init(), всегда возвращает один и тот же идентификатор корневой категории для всех магазинов 2 - возвращает корневую категорию для текущего выбранного хранилища, но не для конкретного 3 - то же, что и 1 – dani

0

Вам не нужно Mage::init(); ни Mage::run(); в модернизации скриптов (монтажников)!

Вы все еще можете получить корневой идентификатор после опуская Mage::init();

+0

Если я не использую Mage :: init(), код возвращает один и тот же идентификатор корневой категории для всех магазинов в системе. – dani

0

Этот код не является элегантным, но не нужен вызов 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; 
    } 
} 
Смежные вопросы