No, non c'è nulla di integrato nel sistema per fare ciò. La convenzione Magento consiste nel creare un oggetto di trasporto stdClass
o Varien_Object
.
Date un'occhiata al codice di evento blocco
#File: app/code/core/Mage/Core/Block/Abstract.php
...
if (self::$_transportObject === null)
{
self::$_transportObject = new Varien_Object;
}
self::$_transportObject->setHtml($html);
Mage::dispatchEvent('core_block_abstract_to_html_after',
array('block' => $this, 'transport' => self::$_transportObject));
$html = self::$_transportObject->getHtml();
...
Da self::$_transportObject
è un oggetto, e PHP oggetti comportarsi in maniera simile riferimento, saranno mantenute tutte le modifiche apportate all'oggetto trasporto in un osservatore. Così, nell'esempio di cui sopra, se uno sviluppatore osservatore ha detto
$html = $observer->getTransport()-setHtml('<p>New Block HTML');
Eseguire il backup del codice di blocco di sistema self::$_transportObject
conterrebbe il nuovo HTML. Tieni presente che gli spettatori multipli avranno la possibilità di modificare questo valore e che gli osservatori degli ordini attivati in Magento saranno diversi per ogni sistema configurato.
Un secondo approccio che è possibile utilizzare è utilizzare il modello di registro di Magento. Registrare una variabile prima dello dispatchEvent
fonte
2012-11-07 20:23:31
Eccellente. Grazie. – Ryan
@Ivan: Posso usare questo approccio per modificare la mia collezione in un osservatore. Dopo aver modificato la collezione e aver provato a restituire $ this' dal mio osservatore, la raccolta rimane invariata. Sto lavorando con la raccolta dei prodotti. Se possibile, puoi dargli una risposta – zamil