当 Magento 调用时:
{{layout handle="sales_email_order_items" order=$order}}
在电子邮件模板中,'order=$order' 位是否只是一个参数对?是否将整个 $order 对象作为 $this->getOrder() 传递给 phtml 模板文件?
我知道我曾一度知道这个问题的答案,但后来忘记了。=(
当 Magento 调用时:
{{layout handle="sales_email_order_items" order=$order}}
在电子邮件模板中,'order=$order' 位是否只是一个参数对?是否将整个 $order 对象作为 $this->getOrder() 传递给 phtml 模板文件?
我知道我曾一度知道这个问题的答案,但后来忘记了。=(
这完全取决于特定指令的实施。在您的示例中,该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。