Enviar dados do controlador para phtml

22

Eu tenho este controlador:

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

Gostaria de acessar $somethingno meu documento .phtml, como faço isso? (ou, de outra forma: como acessar $somethingno meu arquivo .phtml)

Bob van Luijt
fonte

Respostas:

21

Há algumas maneiras de fazer isso.

Atribuir diretamente ao bloco:

$block->assign($var);

ou

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

Então você pode acessá-lo no arquivo phtml assim:

$this->myvar

Use o registro Mage:

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

e depois use-o como:

$var = Mage::registry('custom_var');
philwinkle
fonte
2
você usou, $block->assign($var)mas como seria recuperado em phtmlarquivo?
Mohammad Faisal
Você teria acesso através $this->myvarde dentro do arquivo template
philwinkle
1
Eu acredito que sim Mage::register($key, $value, ...). Então Mage::register('custom_var', $var)?
Musicliftsme
4
Deveria ser $block->assign('myvar',$var);, não deveria?
Fritzmg 28/06
@philwinkle Mage::register('custom_var', $var); Escreva o valor na sessão e isso pode ser acessível a partir de outro arquivo de modelo, exceto o modelo de ação atual também?
Butterfly
18

Seu phtml deve ser processado por um bloco. O bloco deve ter um nome no layout.
Você pode fazer isso depois de ligar$this->loadLayout();

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

Então você pode obter o valor no phtmlarquivo como

$value = $this->getSomething();
//or 
$value = $this->getData('something');
Marius
fonte
isso não funciona para mim :(, eu tenho um controlador que retorna a identificação do produto através de AJAX, para visualização rápida de produtos.
Shathish
@ Shathish. Esta é uma questão diferente. Você pode renderizar a resposta como JSON e usar os valores no manipulador de resposta AJAX.
Marius
Sim, estou usando JSON para retornar o conteúdo do bloco (something.phtml) e atualizar a div com esses detalhes na página de lista. Como posso passar a variável do meu controlador para something.phtml? atualmente eu faço isso usando o método $ block-> assign (), que eu acho que não é o caminho certo (pois é um acoplamento apertado - me corrija se eu estiver errado) ou devo postar isso como uma pergunta?
Shathish 16/09/2013
@ shathish talvez você faça outra pergunta e espere que ela não seja marcada como duplicada.
Marius
3

Caso você tenha perdido, há mais uma maneira de fazer isso

usando sessões

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

fonte

epynic
fonte
Mesmo se você tiver os dados na sessão para usá-los posteriormente, recomendo usar $block->setSomething()ou $block->assign(). Parece "muito código" e deve ser evitado o máximo de php possível.
Fabian Blechschmidt 16/09
-1

Se você estiver dentro do seu controlador de bloco.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Em seguida, no seu arquivo .phtml

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

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>
Wolfgang
fonte
O que você chama de "controlador de bloco" é apenas chamado de "bloco" no Magento. A questão era sobre ações do controlador encontradas no controllersdiretório de um módulo.
Fabian Schmengler
-4

isso é muito fácil de enviar dados do controlador para o arquivo phtml.

Etapa 1: - Primeiro, crie a classe Model e se estende de Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

Passo 2: - Agora abra o arquivo contoller e coloque o código na função.

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

Passo 3: - Abra o arquivo phtml e coloque o código.

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

Saída: - 'gaurav';

gaurav tyagi
fonte