Obtenir une liste des magasins magento

Comment puis-je obtenir une liste de groupes de magasins sous un site Web à Magento et ensuite une liste de magasins de ce groupe de magasins?

26
demandé sur Benjamin 2011-05-03 13:36:00

2 réponses

Essayez ceci pour obtenir directement les objets

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 le nécessaire cadre de l'un des sites web spécifiques ou magasin

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 dans les 60 secondes. J'ai d'abord grep pour les noms de méthode ou une méthode similaire noms 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 est grep pour les échantillons d'utilisation pour voir comment ils sont censés être utilisés par développeurs de base. 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 un endroit pour chercher des exemples:

grep '>getWebsites' app/code -rsn
82
répondu Anton S 2011-05-03 10:00:16

la réponse d'Anton, bien que correcte, pourrait réinventer un peu la roue. Il y a déjà une facilité dans le cœur de Magento pour récupérer ce genre de données.

vous pouvez récupérer une liste de tous les sites web, et leurs "enfants" en utilisant ceci: Mage::getSingleton('adminhtml/system_store')->getStoresStructure() Vous pouvez également passer 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 y en a un similaire utilisé pour peupler les abandons "Store Scope" et les sélections multiples sont présents dans toute la section admin.

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 ceci, j'ai localisé un multi-select sur L'administrateur qui a les données que je voulais, puis j'ai activé les astuces de template pour trouver quelle classe de bloc était responsable de le rendre: Mage_Adminhtml_Block_Cms_Page_Edit_Form. Sachant cela, j'ai trouvé la classe dans la base de code(app/code/core/Mage/Adminhtml/Bloc/Cms/Block/Modifier/Forme.php) et localisé la partie qui crée l'input en cherchant son étiquette ("Store View"). Ceci m'a montré comment les valeurs d'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),
));

Mage::getSingleton('adminhtml/system_store') points à la classe Mage_Adminhtml_Model_System_Store, où j'ai trouvé une variété de méthodes similaires qui peuvent également être utiles. regardez par vous-même.

12
répondu Eric Seastrand 2017-12-20 13:50:24