Question

Dans Zend Framework nous fournissons des propriétés à dispositions qui sont ensuite consommés dans la vue. Un exemple de ceci serait:

$this->layout = new Zend_Layout();
$this->layout->username = 'John';
$this->layout->email = 'john@foofoobunnies.edu';

Ce que je voudrais plus tard écho dans mon view.phtml:

<?= $this->username; ?>
<?= $this->email; ?>

Cependant, je me retrouve dans les méthodes de bloc écrire Magento qui renvoient des objets entiers à être consommés par la vue - par exemple:

Bloquer / User.php

public function getUser(){
    return Mage::getModel('mymodule/user')->load($this->getUserId());
}

Et dans mon user.phtml :

$user = $this->getUser();
echo $user->getUsername();
echo $this->getEmail();

Est-il possible de découper cette étape d'avoir des méthodes de bloc d'écriture pour renvoyer des données pertinentes? Je l'ai utilisé cette méthode pour 2-3 ans donc je ne suis pas étranger à cela, mais il semble tout comme le Zend en deux étapes / vue composite paradigme de la mise en page est beaucoup plus rapide à pirater sur.

Modifier

Il viens de me rendre qu'il peut être possible d'utiliser les propriétés du bloc de la même manière que j'utiliser les méthodes de bloc, par exemple $this->username où $ cela peut être un objet de type Mymodule_User_Block_User; bien que je ne sais pas si cela est une pratique comprise ou acceptée dans Magento, comme je l'ai pas vu trop souvent.

Était-ce utile?

La solution

Il y a toujours assign() et les apporteurs mentionnés ci-dessus et setters via Varien_Object::_call()

Autres conseils

Votre modification à votre question résume assez bien vers le haut.

Vous utilisez $this lorsque le bloc est une instance de ce que vous essayez d'accéder, dans des limites raisonnables bien sûr. Un bloc ne va pas être l'équivalent du modèle respectif dont vous avez besoin.

Mais en termes de données et de passer à travers des blocs, vous pouvez utiliser XML ou PHP pour y parvenir.

En PHP

$this->getLayout()->getBlock('block_name')->setData('user', Mage::getModel('mymodule/user')->load($this->getUserId())); 

Ou en XML

<block type="mymodule/user" name="block_name">
  <action method="setUserId"><user_id>string_goes_here</user_id></action>
</block>

Vous pouvez faire votre propre méthode d'action pour définir l'objet utilisateur lui-même (évidemment, je l'ai crûment Hardcoded une chaîne, mais les principaux peuplements).

La méthode toHtml() en Mage_Core_Block_Template comprend plus ou moins le fichier phtml, par conséquent, vous êtes dans le contexte du bloc. Vous pouvez faire tout ce que le bloc ou l'environnement Magento vous offre.

L'utilisation $this->username ne sont pas les meilleures pratiques. Je pense que la méthode get, vous êtes absolument libre de changer quelque chose plus tard, sans changer la logique de base avec le tableau de données, étendue de Varien_Object. Ajouter un contrôle, substituez la __get() standard avec getUsername() et retour quelque chose d'autre que dans le tableau de données, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top