将数据从控制器发送到phtml


22

我有这个控制器:

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

我想访问$something我的.phtml文档,该怎么做?(或者$something换一种说法:如何访问我的.phtml文件)

Answers:


21

有两种方法可以做到这一点。

直接分配给块:

$block->assign($var);

要么

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

然后,您可以像下面这样在phtml文件中访问它:

$this->myvar

使用法师注册表:

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

然后像这样使用它:

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

2
您曾经使用过,$block->assign($var)但是如何在phtml文件中检索呢?
Mohammad Faisal 2014年

您将通过$this->myvar模板文件中的进行访问
philwinkle

1
我相信是Mage::register($key, $value, ...)。那么,Mage::register('custom_var', $var)
musicliftsme 2015年

4
应该是$block->assign('myvar',$var);,不是吗?
2016年

@philwinkle是否Mage::register('custom_var', $var); 在会话中写入值,并且可以从除当前操作模板之外的其他模板文件访问该值?
蝴蝶

18

您的phtml必须由一个块呈现。该块必须在布局中具有名称。
您可以在致电后执行此操作$this->loadLayout();

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

然后您可以在phtml文件中获取值,例如

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

这对我不起作用:(,我有一个控制器会通过AJAX返回产品ID,以便快速查看产品
。– Shathish 2013年

@Shathish。这是一个不同的问题。您可以将响应表示为JSON,并使用AJAX响应处理程序中的值。
马里乌斯

是的,我正在使用JSON返回块(something.phtml)的内容并使用列表页面中的这些详细信息更新div,如何将变量从控制器传递给something.phtml?实际上,我目前使用$ block-> assign()方法执行此操作,我认为这是不正确的方法(因为它是紧密耦合的-如果我错了,请纠正我),还是应该将其发布为问题?
Shathish

@shathish也许您会问另一个问题,希望它不会被标记为重复。
马里乌斯

3

万一您错过了,还有另一种方法可以完成此任务

使用会话

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

资源


即使会话中有数据供以后使用,我还是建议使用$block->setSomething()$block->assign()。感觉就像“太多代码”,应尽可能避免使用php。
Fabian Blechschmidt

-1

如果您在块控制器中。

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

然后在您的.phtml文件中

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

   ?>

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

您所谓的“块控制器”在Magento中仅称为“块”。问题是关于在controllers模块目录中找到的控制器操作。
Fabian Schmengler '16

-4

这很容易将数据从控制器发送到phtml文件。

步骤1:-首先创建Model类,并从Varien_Object扩展

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

步骤2:-现在打开contollerfile并将代码放入函数中。

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

步骤3:-打开phtml文件并放入代码。

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

输出:-'gaurav';

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.