Passer un tableau à partir du fichier bloc fichier modèle
-
16-10-2019 - |
Question
J'ai une collection de magasins Dealer. Je l'ai mis en place une fonction qui calcule la distance de tous les magasins de l'emplacement du client et j'ai un tableau de distances respectives. J'ai ajouté la logique dans le fichier Block.php.
Maintenant, je veux que ce tableau à accéder à partir d'un fichier de modèle. Comment puis-je mettre en œuvre cela?
Toutes les réponses que je reçois de web sont à l'opposé exact de ce qui est besoin - Passage de données à partir du fichier de modèle dans le fichier de bloc
Toute aide serait appréciée ..
La solution
Le modèle est à l'intérieur du renderer contexte de classe de bloc, ce moyen toutes les informations que vous mettez dans $block->setMyPersonalVar($value)
peuvent être lus avec $this->getMyPersonalValue()
à l'intérieur du modèle. Donc, tant que vous avez une référence à la classe de bloc dans $ bloc, vous pouvez définir une valeur sur elle.
Ceci peut être utilisé dans la classe de bloc lui-même, par exemple en toHtml
ou dans le $this->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
de classe contrôleur ou partout où vous voulez, par exemple des observateurs avec Mage::app()->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
L'alternative est d'utiliser Mage::register('name', $value)
et Mage::registry('name')
Si cela ne fonctionne pas ma première supposition est: Le code est exécuté dans le mauvais ordre
Autres conseils
Ok Considérons un exemple:
votre fichier bloc se compose de la fonction qui renvoie "Array" , comme
public function someFunction(){
//your logic
return $your_array;
}
dans votre config.xml
<config>
...
<frontend>
...
<layout>
<updates>
<yournamespace_yourmodule module="Yournamspace_YourModule">
<file>something.xml</file>
</yournamespace_yourmodule>
</updates>
</layout>
app / design / frontend / default / votre_theme / layout / something.xml
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<block_in_which_you_want_your_template>
<reference name="parent_block_name">
<block type="yourmodule/block_path" name="unique_name" template="path/to/your/template.phtml" /> <!-- important part of this answer -->
</reference>
...
maintenant dans votre template.phtml
$this->someFunction()
d'appel pour obtenir le tableau.
la clé est le bloc avec déclarer votre fichier modèle dans something.xml, de sorte que tous les membres de votre bloc sont accessibles dans le modèle avec l'objet ($this
).