Как я могу получить список групп магазинов под веб-сайтом в Magento, а затем список магазинов из этой группы магазинов?
Получение списка магазинов magento
Ответ 1
Попробуйте это, чтобы получить объекты непосредственно
Mage::app()->getWebsites(); < in file > app/code/core/Mage/Core/Model/App.php:920
Mage::app()->getStores(); < in file > app/code/core/Mage/Core/Model/App.php:834
итерации, чтобы получить необходимый объем одного конкретного веб-сайта или магазина
foreach (Mage::app()->getWebsites() as $website) {
foreach ($website->getGroups() as $group) {
$stores = $group->getStores();
foreach ($stores as $store) {
//$store is a store object
}
}
}
В будущем, если у вас есть похожие вопросы, как я обнаружил эти ответы в течение 60 секунд. Сначала я grep для имен методов или аналогичных имен методов с пробелом перед именем метода, чтобы увидеть, где определены методы.
grep ' getStores' app/code -rsn
grep ' getWebsites' app/code -rsn
Второй шаг - это grep для образцов использования, чтобы увидеть, как они предназначены для использования основными разработчиками. Для этого я добавляю > methodName в grep, и это дает мне список файлов, в которых этот метод вызывается, и это даст нам место для поиска примеров:
grep '>getWebsites' app/code -rsn
Ответ 2
Антон отвечает, правда, может немного изобретать колесо. В Magento Core уже есть средство для извлечения таких данных.
Вы можете получить список всех веб-сайтов и их "детей", используя это:
Mage::getSingleton('adminhtml/system_store')->getStoresStructure()
Вы также можете передать массив параметров сайта, storeIds или storeGroupIds для функции, чтобы отфильтровать список:
public function getStoresStructure($isAll = false, $storeIds = array(), $groupIds = array(), $websiteIds = array())
Пример вывода:
Array
(
[1] => Array
(
[value] => 1
[label] => Main Website
[children] => Array
(
[1] => Array
(
[value] => 1
[label] => Madison Island
[children] => Array
(
[1] => Array
(
[value] => 1
[label] => English
)
[2] => Array
(
[value] => 2
[label] => French
)
[3] => Array
(
[value] => 3
[label] => German
)
)
)
)
)
)
Существует аналогичный файл, который используется для заполнения раскрывающихся списков "Складской шкаф" и множественного выбора по всей секции администратора.
Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true)
Array
(
[0] => Array
(
[label] => All Store Views
[value] => 0
)
[1] => Array
(
[label] => Main Website
[value] => Array
(
)
)
[2] => Array
(
[label] => Madison Island
[value] => Array
(
[0] => Array
(
[label] => English
[value] => 1
)
[1] => Array
(
[label] => French
[value] => 2
)
[2] => Array
(
[label] => German
[value] => 3
)
)
)
)
Чтобы узнать об этом, я обнаружил мульти-select в Admin, у которого есть данные, которые я хотел, затем я включил подсказки шаблона, чтобы узнать, какой класс блока отвечает за его отображение: Mage_Adminhtml_Block_Cms_Page_Edit_Form
. Зная это, я нашел класс в базе кода (app/code/core/Mage/Adminhtml/Block/Cms/Block/Edit/Form.php) и разместил часть, которая создает вход, путем поиска его метки ( "Сохранить Посмотреть" ). Это показало мне, как вводятся следующие значения:
$field =$fieldset->addField('store_id', 'multiselect', array(
'name' => 'stores[]',
'label' => Mage::helper('cms')->__('Store View'),
'title' => Mage::helper('cms')->__('Store View'),
'required' => true,
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
));
Mage::getSingleton('adminhtml/system_store')
указывает на класс Mage_Adminhtml_Model_System_Store
, где я нашел множество подобных методов, которые также могут быть полезны. Посмотрите сами.