Invia dati dal controller a phtml


22

Ho questo controller:

...
public function insertAction() {
    $something = 'testcase';
    $this->loadLayout();
    $this->_title($this->__("the title"));
    $this->renderLayout();
}
...

Vorrei accedere $somethingal mio documento .phtml, come posso fare? (o per dirla in altro modo: come posso accedere $somethingal mio file .phtml)

Risposte:


21

Ci sono un paio di modi per farlo.

Assegna direttamente al blocco:

$block->assign($var);

o

$block->assign(array('myvar'=>'value','anothervar'=>true));

Quindi puoi accedervi nel file phtml in questo modo:

$this->myvar

Usa il registro di Mage:

Mage::register('custom_var', $var);

e poi usalo come:

$var = Mage::registry('custom_var');

2
hai usato $block->assign($var)ma come verrebbe recuperato nel phtmlfile?
Mohammad Faisal,

Si accede tramite $this->myvardal file modello
Philwinkle

1
Credo di si Mage::register($key, $value, ...). Quindi Mage::register('custom_var', $var)?
musicliftsme

4
Dovrebbe essere $block->assign('myvar',$var);, no?
fritzmg,

@philwinkle Scrive Mage::register('custom_var', $var); il valore nella sessione e questo può essere accessibile da altri file modello eccetto il modello di azione corrente?
Farfalla,

18

Il tuo phtml deve essere reso da un blocco. Il blocco deve avere un nome nel layout.
Puoi farlo dopo aver chiamato$this->loadLayout();

$block = Mage::app()->getLayout()->getBlock('block_name_here')
if ($block){//check if block actually exists
   $block->setSomething($something);
}

Quindi è possibile ottenere il valore nel phtmlfile come

$value = $this->getSomething();
//or 
$value = $this->getData('something');

questo non funziona per me :(, ho un controller che restituisce l'id del prodotto tramite AJAX, per una rapida visualizzazione dei prodotti.
Shathish

@Shathish. Questo è un problema diverso. È possibile eseguire il rendering della risposta come JSON e utilizzare i valori nel gestore risposte AJAX.
Marius

Sì, sto usando JSON per restituire il contenuto del blocco (something.phtml) e aggiornare il div con questi dettagli nella pagina dell'elenco, come posso passare la variabile dal mio controller a qualcosa di Tog.ph? attualmente lo faccio attualmente usando il metodo $ block-> assegnato (), che ritengo non sia il modo giusto (dato che è un accoppiamento stretto - correggimi se sbaglio) o devo postarlo come una domanda?
Shathish,

@shathish forse faresti un'altra domanda e spero che non venga contrassegnato come duplicato.
Marius

3

Nel caso in cui vi perdiate persone, c'è un altro modo per farlo

usando le sessioni

Mage::getSingleton('core/session')->setSomeSessionVar($data);// In the Controller
$data = Mage::getSingleton('core/session')->getSomeSessionVar(); // In the View;

fonte


Anche se hai i dati nella sessione per usarli in seguito, ti consiglio di usare $block->setSomething()o $block->assign(). Sembra "troppo codice" e dovrebbe essere evitato quanto più php possibile.
Fabian Blechschmidt,

-1

Se ti trovi nel controller del blocco.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Quindi nel tuo file .phtml

   <?php 
        $variable = $this->_var;
        echo $variable; // prints "something"

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>

Quello che chiami "controller di blocco" è semplicemente chiamato "blocco" in Magento. La domanda riguardava le azioni del controller trovate nella controllersdirectory di un modulo.
Fabian Schmengler

-4

è molto semplice inviare i dati dal controller al file phtml.

Step1: - Innanzitutto crea la classe Model e si estende da Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

step2: - Ora apri il file contoller e inserisci il codice nella funzione.

$name='gaurav';
$this->loadLayout();
Mage::getSingleton('Modulename/Modelfilename')->setData('name',$name);
$this->renderLayout();

Step3: - Apri il file phtml e inserisci il codice.

echo $name=Mage::getSingleton('Modulename/Modelfilename')->getData('name');

Uscita: - "gaurav";

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.