Passando un array da file di blocco a file di modello
-
16-10-2019 - |
Domanda
Ho una collezione di Dealer Stores. Ho implementato una funzione che calcola la distanza di tutti i negozi dalla localizzazione del cliente e ho un array di rispettive distanze. Ho aggiunto la logica nel file di Block.php.
Ora voglio questo array a cui accedere da un file di modello. Come faccio a implementare questo?
Tutte le risposte che ricevo da web sono esatto contrario di ciò che è mancanza - Passando i dati da file modello di file del blocco
Qualsiasi aiuto sarebbe apprezzato ..
Soluzione
Il modello è renderer all'interno del contesto classe di blocco, questo significa che tutte le informazioni che hai messo in $block->setMyPersonalVar($value)
possono essere letti con $this->getMyPersonalValue()
all'interno del template. Quindi, fino a quando si dispone di un riferimento alla classe di blocco in blocco $, è possibile impostare qualsiasi valore su di esso.
Questo può essere usato nella classe blocco stesso, ad esempio in toHtml
o nel $this->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
classe controller o dove vuoi, per esempio in osservatori con Mage::app()->getLayout()->getBlock('nameInLayout')->setMyPersonalValue()
L'alternativa è quella di utilizzare Mage::register('name', $value)
e Mage::registry('name')
Se questo non funziona la mia prima ipotesi è: il codice viene eseguito nell'ordine sbagliato
Altri suggerimenti
Ok Consideriamo un esempio:
il file Block è costituito dalla funzione che restituisce il tuo "array" , come
public function someFunction(){
//your logic
return $your_array;
}
nel tuo config.xml
<config>
...
<frontend>
...
<layout>
<updates>
<yournamespace_yourmodule module="Yournamspace_YourModule">
<file>something.xml</file>
</yournamespace_yourmodule>
</updates>
</layout>
app / design / frontend / default / your_theme / layout / something.xml
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<block_in_which_you_want_your_template>
<reference name="parent_block_name">
<block type="yourmodule/block_path" name="unique_name" template="path/to/your/template.phtml" /> <!-- important part of this answer -->
</reference>
...
ora nel tuo template.phtml
chiamata $this->someFunction()
per ottenere la matrice.
la chiave sta dichiarando il blocco con il file di modello in something.xml, in modo che tutti i membri da tuo blocco sono accessibili nel modello con l'oggetto ($this
).