2011-05-03 10 views

Respuesta

77

Pruebe esto para conseguir 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 

iterar sobre conseguir el alcance necesario de un sitio web específico o almacenar

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 tiene preguntas similares así es como he descubierto esas respuestas dentro de 60 segundos. En primer lugar i de grep para obtener nombres de los métodos o nombres de métodos similares con espacio antes de nombre de método para ver donde se definen los métodos

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

El segundo paso es grep para ejemplos de uso para ver cómo que están destinados a utilizar por los desarrolladores de núcleo. Para que agrego> methodName a grep y esto me da lista de archivos en el que se llama a este método y esto nos dará lugar para buscar ejemplos:

grep '>getWebsites' app/code -rsn 
+0

Muchas gracias hombre. ¡Eso fue muy útil! – Blazo

+0

vóyelo y acéptelo para que otros puedan consultarlo en el futuro si resolvió su problema –

+0

Sí, resolvió mi problema. Gracias de nuevo, y cómo votar, dice que necesito 15 reputación para votar – Blazo

11

respuesta de Anton, mientras correcta, puede ser re-inventar la rueda un poco. Ya hay una instalación en Magento Core para recuperar este tipo de datos.

Puede recuperar una lista de todos los sitios web, y sus "niños" por medio de esto: Mage::getSingleton('adminhtml/system_store')->getStoresStructure() También puede pasar una matriz de websiteIds, StoreID, 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 
             ) 

           ) 

         ) 

       ) 

     ) 

) 

Existe una similar se utiliza para rellenar los "tienda de Alcance" menús desplegables y multi-selecciona todo el 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, encuentra una selección múltiple en la administración que tiene los datos que quería, entonces encendí plantilla consejos para saber qué clase de bloque era el encargado de mostrar que: 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 localicé la parte que crea la entrada buscando su etiqueta ("Store Ver"). Esto me mostró cómo estaban siendo siempre los valores de la entrada:

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

Los Mage::getSingleton('adminhtml/system_store') puntos a la clase Mage_Adminhtml_Model_System_Store, donde encontré una variedad de métodos similares que también pueden ser útiles. Have a look for yourself.

+0

'values' => Mage :: getSingleton ('adminhtml/system_store') -> getStoreValuesForForm (falso, cierto), funcionó a gusto !! – BENN1TH

Cuestiones relacionadas