Passer des données de la mise en page au bloc contrôleur en utilisant setData
Je suis en train de définir une variable dans mon local.xml fichier pour mon bloc personnalisé:
<layout>
<!-- ... -->
<page_homepage>
<!-- ... -->
<reference name="root">
<!-- ... -->
<block type="core/template" name="home_page_sections" template="page/homepage/sections.phtml">
<block type="layout/carousel" name="featured_carousel">
<action method="setData">
<name>filter_attribute</name>
<value>is_featured_product</value>
</action>
</block>
</block>
</reference>
</page_homepage>
</layout>
Mais je ne reçois pas les données sur l'autre extrémité dans mon controller:
class Foo_Layout_Block_Carousel extends Mage_Core_Block_Template
{
public function __construct()
{
parent::__construct();
$filterAttribute = $this->getFilterAttribute(); //Nothing
$filterAttribute = $this->getData('filter_attribute'); //Nada
//Alright, fine, what DO I have?!
var_dump($this->getData()); //array(0) {} ... Argh!
}
}
De toutes mes recherches, j'ai trouvé que cela devrait vraiment travailler, mais depuis il ne le fait pas, j'ai le sentiment que je suis absent quelque chose d'évident. Voici ma présentation du module de configuration (je suis en utilisant un seul module pour définir une page d'accueil et toutes les autres blocs dont j'ai besoin pour le site):
<?xml version="1.0"?>
<config>
<modules>
<Foo_Layout>
<version>0.1.0</version>
</Foo_Layout>
</modules>
<global>
<page>
<layouts>
<foo_homepage translate="label">
<label>Homepage</label>
<template>page/homepage.phtml</template>
<layout_handle>page_homepage</layout_handle>
</foo_homepage>
</layouts>
</page>
<blocks>
<layout>
<class>Foo_Layout_Block</class>
</layout>
</blocks>
</global>
</config>
source d'informationauteur The Maniac
Vous devez vous connecter pour publier un commentaire.
Lors de la mise en page du code de rendu des rencontres de ce
Il immédiatement instancie le bloc. Cela signifie que le bloc de
__construct
méthode est appelée avant votresetData
méthode est appelée. Ainsi, au moment de la construction, aucune donnée n'a été définie, c'est pourquoi vos appels àvar_dump
renvoie un tableau vide.Aussi, immédiatement après sa création, le bloc est ajouté à la mise en page
Lorsque cela se produit, le bloc de
_prepareLayout
méthode est appelée.Donc, cela signifie que tout ensemble de données dans votre mise en page de mise à jour xml est encore pas disponible, même dans
_prepareLayout
. Une fois que le système est fait pour créer le bloc, il se déplace vers le prochain nœud XML.et appelle la
setData
méthode. Maintenant, votre bloc a son jeu de données.Essayer de définir un
_beforeToHtml
méthode sur votre bloc et la vérification des données. (En supposant que votre bloc est en cours de rendu)je pense que la définition du bloc est faux. Pouvez-vous essayer
et dans la phtml récupérer la valeur avec $this->getAttribute()
Vous pouvez voir l'exemple suivant:
}
Et la définition dans le backend, j'ai mis dans ma maison CMS
un autre exemple que je trouve dans une extension:
De passer des variables à partir d'un modèle à un bloc:
Obtenir la valeur de la variable dans le bloc de mise en page: