Partager des données entre les controllers et les blocks dans Magento

Comme vous le savez peut-être, la solution e-commerce Magento a un système de template très puissant. Nous pouvons dire la même chose concernant la partie logique du sytème. Grosso modo Magento est composé d'environ 50 modules. Il y un module pour l'enregistrement d'une commande, un pour les clients, un pour les pages CMS etc. Un module est composé de plusieurs parties. La partie design, la partie controllers, blocks, models et helpers. Les controllers contiennent toutes les actions déclenchées lors de l'utilisation d'un module d'un site Magento. Quand nous avons l'url http://www.my-eshop.tld/index.php/a/b/c

cela signifie que le module a doit lancer l'action c contenue dans le controller b.

Les blocks servent à préparer les données pour les templates. Chaque template utilisée doit avoir un block. Les blocs peuvent être simples mais ils peuvent être également plus complexes. Dans certains cas, il peut être utile de déplacer des données du controller vers le block afin de ne pas devoir recalculer ces données.

Pour cela, nous pouvons utiliser une des fonctionnalités de Magento : les registres.

Dans le controller on enregistre notre données dans la variable nommée $data. Nous pouvons utiliser un registre comme cela :

Mage::register('MyData',$dat);

Dans le fichier du block, nous pouvons accéder aux données de cette variable en utilisant :

$data = Mage::registry('MyData');

C'est une petite astuce qui peut s'avérer être très utile.

Traduction par Laurent Clouet