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.