Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email Magento-CMS语法-布局句柄更新参数_Email_Magento_Syntax_Content Management System - Fatal编程技术网

Email Magento-CMS语法-布局句柄更新参数

Email Magento-CMS语法-布局句柄更新参数,email,magento,syntax,content-management-system,Email,Magento,Syntax,Content Management System,当Magento呼叫时: {{layout handle="sales_email_order_items" order=$order}} 在电子邮件模板中,“order=$order”位只是一个参数对吗?是否将整个$order对象作为$this->getOrder()传递给phtml模板文件 我知道我曾经知道这个问题的答案,但后来忘记了=(这完全取决于特定指令的实现。在您的示例中,布局指令在 #File: app/code/core/Mage/Core/Model/Email/Templat

当Magento呼叫时:

{{layout handle="sales_email_order_items" order=$order}}
在电子邮件模板中,“order=$order”位只是一个参数对吗?是否将整个$order对象作为$this->getOrder()传递给phtml模板文件


我知道我曾经知道这个问题的答案,但后来忘记了=(

这完全取决于特定指令的实现。在您的示例中,
布局
指令在

#File: app/code/core/Mage/Core/Model/Email/Template/Filter.php
public function layoutDirective($construction)
{
    ...
}
$construction参数包含模板标记属性的列表。这些属性被解析为参数

$params = $this->_getIncludeParameters($construction[2]);
将实例化一个新的布局对象

$layout = Mage::getModel('core/layout');
然后,对于新布局对象中的每个块,将每个参数指定为数据参数

foreach ($layout->getAllBlocks() as $blockName => $block) {
    /* @var $block Mage_Core_Block_Abstract */
    foreach ($params as $k => $v) {
        if (in_array($k, $skipParams)) {
            continue;
        }

        $block->setDataUsingMethod($k, $v);
    }
}

以上假设Magento 1.7.x.

因此,当它将order=$order传递给phtml模板时,该对象是否已准备好放入phtml模板中?或者这取决于layout.xml文件中定义的块类型?如何调用$object?直接尝试可能比我猜测更快。不确定在尝试初始化时它为什么不起作用是的,但是获取通过layout指令传递的order=$order对象非常简单,只需$this->getOrder()。