miércoles, 14 de marzo de 2012

¿Cómo pasar parámetros a un bloque desde su declaración en el layout?

Una buena práctica para optimizar la carga de las plantillas en Magento es pasar las variables que se necesitan en el bloque desde su declaración en el layout, asignando los valores de dichas variables con llamados a métodos disponibles en helpers.

Ahora algo de código para ilustrar este procedimiento.

  • Declaración del bloque en el layout. 

     
         
     

Con la etiqueta ‘action’ se esta declarando la variable ‘streetstyleList’ y se le esta asignando un ‘array’ cuyo valor es el resultado retornado por el método ‘getStreetstyleList()’ encontrado en el helper ‘data’ del módulo ‘streetstyle’.

  • Utilizar la variable en la plantilla.
Una vez declarada la variable en el layout, se puede utilizar en la plantilla de forma transparente, accediendo a ella mediante ‘$this->nombreVariable’. Ejemplo: En ‘streetstyle-temp.phtml’ se podría utilizar así:
    <?php foreach ($this->streetstyleList as $streetStyle): ?>
  • <?php echo $streetStyle[‘name’]; ?>
  • <?php endforeach; ?>

  • Método que retorna el valor de la variable desde el helper.
Para este ejemplo se tiene una función que obtiene la colección de productos tipo ‘bundle’ de la cual solo se  necesitan el identificador y el nombre de los productos, por lo que se almacenan en un ‘array’ que corresponde con el tipo de dato que se declaró en el layout para la variable utilizada en el bloque.
public function getStreetstyleList(){
    $result=array();
    $model=Mage::getModel('catalog/product');
    $collectionBundleStreetstyle=$model->getCollection()
             ->addAttributeToSelect('cb_name_streetstyle')
             ->addAttributeToFilter('type_id', array('eq' => 'bundle'))
             ->addAttributeToFilter('cb_is_streetstyle', 1);

    foreach($collectionBundleStreetstyle as $streetstyle){
        $result[]=array('id'=>$streetstyle->getId(), 
                        'name'=>$streetstyle->getCbNameStreetstyle());
    }
    return $result;
}

No hay comentarios:

Publicar un comentario en la entrada