Enviar datos desde el controlador a phtml


22

Tengo este controlador:

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

Me gustaría acceder $somethingen mi documento .phtml, ¿cómo hago esto? (o para decirlo de otra manera: ¿cómo puedo acceder $somethingen mi archivo .phtml)

Respuestas:


21

Hay un par de formas de hacer esto.

Asignar directamente al bloque:

$block->assign($var);

o

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

Luego puede acceder a él en el archivo phtml de esta manera:

$this->myvar

Use el registro de Mage:

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

y luego úsalo como:

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

2
has utilizado $block->assign($var)pero ¿cómo se recuperaría en el phtmlarchivo?
Mohammad Faisal

Usted podrá acceder a través $this->myvardel interior del archivo de plantilla
philwinkle

1
Creo que es Mage::register($key, $value, ...). Por lo tanto, Mage::register('custom_var', $var)?
musicliftsme

44
Debería ser $block->assign('myvar',$var);, ¿no?
fritzmg

@philwinkle ¿ Mage::register('custom_var', $var); Escribe el valor en la sesión y se puede acceder a este desde otro archivo de plantilla, excepto la plantilla de acción actual también?
Mariposa

18

Su phtml debe estar representado por un bloque. El bloque debe tener un nombre en el diseño.
Puedes hacer esto después de llamar$this->loadLayout();

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

Entonces puede obtener el valor en el phtmlarchivo como

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

esto no funciona para mí :(, tengo un controlador que devuelve la identificación del producto a través de AJAX, para una vista rápida de los productos.
Shathish

@Shathish. Este es un problema diferente. Puede procesar la respuesta como JSON y usar los valores en el controlador de respuestas AJAX.
Marius

Sí, estoy usando JSON para devolver el contenido del bloque (something.phtml) y actualizar el div con estos detalles en la página de lista, ¿cómo puedo pasar la variable de mi controlador a something.phtml? en realidad hago esto actualmente usando el método $ block-> asignar (), que creo que no es la forma correcta (ya que es un acoplamiento estrecho, corrígeme si estoy equivocado) o ¿publicaré esto como una pregunta?
Shathish

@ Shathish tal vez harías otra pregunta y espero que no se marque como duplicado.
Marius

3

En caso de que ustedes se hayan perdido, hay una forma más de hacer esto

usando sesiones

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

fuente


Incluso si tiene los datos en la sesión para usarlos más tarde, le recomiendo usar $block->setSomething()o $block->assign(). Esto se siente como "demasiado código" y debe evitarse la mayor cantidad de php posible.
Fabian Blechschmidt

-1

Si estás dentro de tu controlador de bloque.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Luego en su archivo .phtml

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

   ?>

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

Lo que llamas "controlador de bloque" se llama simplemente "bloque" en Magento. La pregunta era sobre las acciones del controlador que se encuentran en el controllersdirectorio de un módulo.
Fabian Schmengler

-4

Es muy fácil enviar datos desde el controlador al archivo phtml.

Paso 1: - Primero crea la clase Modelo y se extiende desde Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

Paso 2: - Ahora abre el archivo contoller y coloca el código en la función.

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

Paso 3: - Abre el archivo phtml y pon el código.

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

Salida: - 'gaurav';

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.