Domanda

In Zend Framework forniamo oggetti da schemi che vengono poi consumati nella vista. Un esempio di questo potrebbe essere:

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

Il che poi avrei eco nel mio view.phtml:

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

Comunque mi ritrovo in Magento iscritto metodi di blocco che restituiscono interi oggetti per essere consumato dalla vista - per esempio:

Blocca / User.php

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

E nella mia user.phtml :

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

C'è un modo per tagliare fuori questo passaggio di dover metodi di blocco in scrittura per restituire i dati rilevanti? Sto usando questo metodo per 2-3 anni, quindi sono estraneo ad esso, ma sembra proprio come la Zend Two-Step / Composito paradigma visualizzazione layout è molto più veloce di incidere su.

Modifica

Semplicemente pensato che può essere possibile utilizzare proprietà dei blocchi nello stesso modo che usano i metodi di blocco, ad esempio $this->username dove $ questo può essere un oggetto di tipo Mymodule_User_Block_User; anche se non so se questa è una pratica capito o accettato in Magento, come non ho visto troppo spesso.

È stato utile?

Soluzione

C'è sempre assign() ed i getter e setter di cui sopra via Varien_Object::_call()

Altri suggerimenti

La modifica alla tua domanda praticamente riassume.

È possibile utilizzare $this quando il blocco è un esempio di ciò che si sta tentando di accedere, entro limiti ragionevoli, naturalmente. Un blocco non sta per essere l'equivalente del rispettivo modello è necessario.

Ma in termini di passaggio di dati da e attraverso i blocchi, è possibile utilizzare XML o PHP per realizzarla.

In PHP

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

o in XML

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

Si potrebbe rendere il proprio metodo di azione per impostare l'oggetto utente in sé (ovviamente, ho crudamente hardcoded una stringa, ma i principali stand).

Il metodo toHtml() in Mage_Core_Block_Template include più o meno il file phtml, quindi, si è nel contesto del blocco. Si può fare tutto il blocco o l'ambiente Magento consente.

Utilizzando $this->username non è delle migliori pratiche. Credo perché con il metodo get, si è assolutamente liberi di cambiare qualcosa più tardi, senza cambiare la logica di base con l'array di dati, estesa dal Varien_Object. Aggiungere un controllo, ignorare la __get() serie con getUsername() e ritorno qualcosa di diverso nella matrice dei dati, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top