Comment puis-je obtenir une liste des groupes de magasins sous un site Web dans Magento, puis une liste des magasins de ce groupe de magasins?
Essayez ceci pour obtenir les objets directement
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
parcourir pour obtenir l'étendue nécessaire d'un site Web ou d'un magasin spécifique
foreach (Mage::app()->getWebsites() as $website) {
foreach ($website->getGroups() as $group) {
$stores = $group->getStores();
foreach ($stores as $store) {
//$store is a store object
}
}
}
Pour l'avenir, si vous avez des questions similaires, voici comment j'ai découvert ces réponses en 60 secondes. Tout d'abord, je demande des noms de méthode ou des noms de méthode similaires avec un espace avant le nom de la méthode pour voir où les méthodes sont définies
grep ' getStores' app/code -rsn
grep ' getWebsites' app/code -rsn
La deuxième étape consiste à demander des exemples d'utilisation pour voir comment ils sont destinés à être utilisés par les développeurs principaux. Pour cela, j'ajoute> methodName à grep et cela me donne la liste des fichiers où cette méthode est appelée et cela nous donnera la place pour chercher des exemples:
grep '>getWebsites' app/code -rsn
La réponse d'Anton, bien que correcte, pourrait réinventer un peu la roue. Il existe déjà une installation dans le Magento Core pour récupérer ce type de données.
Vous pouvez récupérer une liste de tous les sites Web et de leurs "enfants" à l'aide de ceci: Mage::getSingleton('adminhtml/system_store')->getStoresStructure()
Vous pouvez également transmettre un tableau de websiteIds, storeIds ou storeGroupIds à la fonction, pour filtrer la liste:
public function getStoresStructure($isAll = false, $storeIds = array(), $groupIds = array(), $websiteIds = array())
Exemple de sortie:
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
)
)
)
)
)
)
Il en existe un similaire utilisé pour remplir les listes déroulantes "Étendue du magasin" et les sélections multiples dans toute la section d'administration.
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
)
)
)
)
Pour découvrir cela, j'ai localisé une sélection multiple sur l'administrateur qui a les données que je voulais, puis j'ai activé les astuces de modèle pour savoir quelle classe de bloc était responsable du rendu: Mage_Adminhtml_Block_Cms_Page_Edit_Form
. Sachant cela, j'ai trouvé la classe dans la base de code (app/code/core/Mage/Adminhtml/Block/Cms/Block/Edit/Form.php) et localisé la partie qui crée l'entrée en recherchant son étiquette ("Store Vue"). Cela m'a montré comment les valeurs de l'entrée étaient fournies:
$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),
));
La Mage::getSingleton('adminhtml/system_store')
pointe vers la classe Mage_Adminhtml_Model_System_Store
, Où j'ai trouvé une variété de méthodes similaires qui peuvent également être utiles. Jetez un œil par vous-même.