0

当 Magento 调用时:

{{layout handle="sales_email_order_items" order=$order}}

在电子邮件模板中,'order=$order' 位是否只是一个参数对?是否将整个 $order 对象作为 $this->getOrder() 传递给 phtml 模板文件?

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

4

1 回答 1

0

这完全取决于特定指令的实施。在您的示例中,该layout指令在

#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。

于 2012-09-20T21:42:35.090 回答