Obtener una lista de tiendas magento


¿Cómo puedo obtener una lista de grupos de tiendas bajo un sitio web en Magento y luego una lista de tiendas de ese grupo de tiendas?

 26
Author: Benjamin, 2011-05-03

2 answers

Pruebe esto para obtener los objetos directamente

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

Itera para obtener el alcance necesario de un sitio web o tienda específica

foreach (Mage::app()->getWebsites() as $website) {
    foreach ($website->getGroups() as $group) {
        $stores = $group->getStores();
        foreach ($stores as $store) {
            //$store is a store object
        }
    }
}

Para el futuro si usted tiene preguntas similares aquí es cómo descubrí esas respuestas dentro de 60 segundos. Primero debo buscar nombres de métodos o nombres de métodos similares con espacio antes del nombre del método para ver dónde se definen los métodos

grep ' getStores' app/code -rsn 
grep ' getWebsites' app/code -rsn 

El segundo paso es grep para muestras de uso para ver cómo están destinadas a ser utilizadas por los desarrolladores principales. Por eso añado > methodName a grep y esto me da una lista de archivos donde se llama a este método y esto nos dará lugar a buscar ejemplos:

grep '>getWebsites' app/code -rsn
 82
Author: Anton S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-03 10:00:16

La respuesta de Anton, aunque correcta, puede ser reinventar la rueda solo un poco. Ya hay una instalación en el núcleo de Magento para recuperar este tipo de datos.

Puede recuperar una lista de todos los sitios web, y sus "hijos" usando esto: Mage::getSingleton('adminhtml/system_store')->getStoresStructure() También puede pasar una matriz de websiteIds, storeIds o storeGroupIds a la función, para filtrar la lista:

public function getStoresStructure($isAll = false, $storeIds = array(), $groupIds = array(), $websiteIds = array())

Ejemplo de salida:

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
                                        )

                                )

                        )

                )

        )

)

Hay uno similar que se usa para rellenar los menús desplegables de "Alcance de la tienda" y múltiples selecciones en toda la sección de administración.

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
                        )

                )

        )

)

Para descubrir esto, localicé una selección múltiple en el Administrador que tiene los datos que quería, luego activé sugerencias de plantilla para averiguar qué clase de bloque era responsable de renderizarlo: Mage_Adminhtml_Block_Cms_Page_Edit_Form. Sabiendo esto, encontré la clase en la base de código, (app/code/core/Mage/Adminhtml/Block/Cms/Block/Edit / Form.php) y localizó la parte que crea la entrada buscando su etiqueta ("Store View"). Esto me mostró cómo la entrada de se proporcionaban valores:

$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),
));

El Mage::getSingleton('adminhtml/system_store') apunta a la clase Mage_Adminhtml_Model_System_Store, donde encontré una variedad de métodos similares que también pueden ser útiles. Echa un vistazo por ti mismo.

 12
Author: Eric Seastrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-20 13:50:24