Magento电子邮件模板:块模板继承已损坏

时间:2013-09-23 11:12:17

标签: magento

问题

当我尝试以下列方式将一个块添加到我的交易电子邮件模板中时:

{{block type='core/template' area='frontend' template='invent/baskettimer/email_items.phtml' record=$record}}

我收到以下错误,并且没有呈现任何内容。

CRIT (2): Not valid template file:frontend/base/default/template/invent/baskettimer/email_items.phtml

疑难解答

  • 通常这个警告指向一个打破继承的拼写错误,但我检查了四倍,这应该有效。
  • 然后我将文件复制到基础并进行测试,它正确呈现。
  • 创建自定义块并设置模板,显示相同的错误。

理论

对我来说,似乎模板继承已经破坏/没有为电子邮件实现,所以它总是在底部查找,我不能把我的模板放在那里所以我不知道如何调用它们。

可能的解决方法

  • 将块渲染为html,然后将其作为变量发送给渲染,问题是我从模型级别发送电子邮件,并且即使有帮助也很难预渲染块。
  • 使用方法渲染数据,不要真的想这样做,因为它是消息/反对MVC。

非常感谢任何帮助。


赏金更新

所以我已经找到了问题,现在可能是一个简单的解决方案。

问题是我从cronjob调用它没有正确的商店视图,使用shell脚本复制类似的情况相当容易,然后将_appCode更改为null。

<?php
require_once 'abstract.php';

class Mage_Shell_Shell extends Mage_Shell_Abstract
{

    protected $_appCode = ''; // works - remove to not work

    /**
     * Run script
     *
     */
    public function run()
    {
        Mage::getModel('invent_baskettimer/email')->sendJob();

    }

}

$shell = new Mage_Shell_Shell();
$shell->run();

基本上这个问题已成为:

无论商店视图如何,如何调用block->toHtml()

1 个答案:

答案 0 :(得分:1)

没有办法将cronjob设置为那样。 Lucky magento允许您模拟商店视图,请参阅以下内容以模拟默认商店。

public function cronjob()
{
    $iDefaultStoreId = Mage::app()
        ->getWebsite()
        ->getDefaultGroup()
        ->getDefaultStoreId();

    $appEmulation = Mage::getSingleton('core/app_emulation');
    $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($iDefaultStoreId);

    .. do your stuff  here ..   

    $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
}

有关详细信息,请参阅:http://inchoo.net/ecommerce/magento/emulate-store-in-magento/