Frage

In Zend Framework bieten wir Layouts, die dann in der Ansicht konsumiert werden, Eigenschaften an. Ein Beispiel hierfür wäre:

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

Was ich später nach meiner Ansicht wiedergeben würde.phtml:

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

Ich bin jedoch in Magento -Schreibblockmethoden, die ganze Objekte zurückgeben, die von der Ansicht konsumiert werden sollen - zum Beispiel:

Block/user.php

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

Und in meinem user.phtml:

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

Gibt es eine Möglichkeit, diesen Schritt zu verkürzen, um Blockmethoden zu schreiben, um relevante Daten zurückzugeben? Ich benutze diese Methode seit 2-3 Jahren, also bin ich kein Fremder, aber es scheint nur, als ob das Zend-Layout-Paradigma mit zwei Schritten/Composite View viel schneller zu hacken ist.

Bearbeiten

Mir ist einfach der Gedanke gekommen, dass es möglich sein kann, Blockeigenschaften auf die gleiche Weise zu verwenden, wie ich die Blockmethoden verwende, z. B. $this->username wobei $ dies ein Objekt vom Typ sein kann Mymodule_User_Block_User; Obwohl ich nicht weiß, ob dies eine verstandene oder akzeptierte Praxis in Magento ist, da ich das nicht zu oft gesehen habe.

War es hilfreich?

Lösung

Es gibt immer assign() und die oben genannten Getter und Setter über Varien_Object::_call()

Andere Tipps

Ihre Bearbeitung zu Ihrer Frage fasst sie so ziemlich zusammen.

Sie nutzen $this Wenn der Block eine Instanz dessen ist, was Sie zugreifen möchten, sind natürlich innerhalb dessen zugreifen. Ein Block wird nicht dem jeweiligen Modell entsprechen, das Sie benötigen.

In Bezug auf die Übergabe von Daten an und durch Blöcke können Sie jedoch XML oder PHP verwenden, um dies zu erreichen.

In PHP

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

Oder in xml

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

Sie könnten Ihre eigene Aktionsmethode erstellen, um das Benutzerobjekt selbst festzulegen (offensichtlich habe ich eine Zeichenfolge grobkodiert, aber der Hauptstar steht).

Das toHtml() Die Methode in mage_core_block_template enthält mehr oder weniger die PHTML -Datei, daher befinden Sie sich im Kontext des Blocks. Sie können alles tun, was der Block oder die Magento -Umgebung Ihnen bietet.

Verwendung $this->username ist keine beste Praxis. Ich glaube Varien_Object. Fügen Sie eine Prüfung hinzu, überschreiben Sie den Standard überschreiben __get() mit getUsername() und gibt etwas anderes zurück als im Datenarray usw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top