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.