1

问题

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

{{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()无论商店视图如何,我如何调用?

4

1 回答 1

1

没有办法将 cronjob 设置为那样。幸运的 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: //incho.net/ecommerce/magento/emulate-store-in-magento/

于 2013-09-25T16:03:05.760 回答