【问题标题】:Editing Magento sales e-mail payment block编辑 Magento 销售电子邮件付款块
【发布时间】:2011-07-29 15:54:56
【问题描述】:

app\locale\en_US\template\email\sales\order_new.html 是有问题的文件。

如何在不影响网站其他部分的情况下编辑 {{var payment_html}}?

该部分似乎来自:app\design\frontend\base\default\template\payment\info\default.phtml

我说的对吗?但该文件在网站的其他地方使用。这也对吗?

我想创建一个单独的文件,比如 default_email.phtml,单独设置它的样式,并让 order_new.phtml 包含新文件。

我假设我需要在layout\***.xml 中包含我的default_email.phtml 文件。我会在哪里做呢?

【问题讨论】:

    标签: email templates magento


    【解决方案1】:

    我做的第一件事是搜索 Magento 的源代码。假设{{var payment_html}} 是在我在payment_html 上搜索的某处处理的。 有几个结果与搜索匹配;

    Mage_Sales_Model_Order
    Mage_Sales_Model_Order_Creditmemo
    Mage_Sales_Model_Order_Invoice
    Mage_Sales_Model_Order_Shipment
    

    因此,该付款块的信息必须在其中。我拿了Mage_Sales_Model_Order 并检查了变量$paymentBlockHtml。这指向通过支付信息填充支付块的进一步逻辑。它正在创建一个块,看起来这在第一次看起来并不容易扩展/更改/修改。 是的,我们可以将模板应用于特定的(支付)块类型,因为创建了一个块,但我们无法轻松检查要加载哪个块。模板在Mage_Payment_Block_Info的构造中也被否决了

    让我们检查一下。

    让我们做一些很酷的事情,为什么我们不向包含正确信息的电子邮件添加一个块,但更重要的是可以切换到正确的大小写。由于模板解析器用于解析变量和布局句柄,我们可以添加以下内容而不是 {{var payment_html}} 块并在块本身中检索该信息。

    {{block type='core/template' template='email/templatename.phtml'}}
    

    上面的代码将 email/templatename.phtml 解析为电子邮件,这意味着您可以在该模板中执行任何操作来显示正确的数据。 在我们可以在此模板中检索付款数据之前,我们必须将 order 参数与订单数据一起添加。这很简单;

    {{block type='core/template' order=$order template='email/templatename.phtml'}}
    

    在模板中我们可以通过$this->getOrder()->getPayment() 来检索支付信息,或者$this->getOrder->getPayment()->toHtml() 或者以其他方式处理数据。

    奖金; 另一种解决方案是使用布局句柄并在 layout.xml 中设置正确的模板和类型,下面是同一电子邮件中订单项的示例。它与块的工作方式相同,但只有布局 xml 中的一些设置。

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

    【讨论】:

      【解决方案2】:

      在 /app/code/core/Mage/Sales/Model/Order.php 中有一个名为“sendNewOrderEmail”的方法。这是你需要影响的。您会发现与以下类似的代码:

      $mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$this->getStoreId()))
                      ->sendTransactional(
                          $template,
                          Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()),
                          $recipient['email'],
                          $recipient['name'],
                          array(
                              'order'         => $this,
                              'billing'       => $this->getBillingAddress(),
                              'payment_html'  => $paymentBlock->toHtml(),  //Just change this line
                          )
                      );
      

      您可以看到这是设置“payment_html”数据的位置。把它换成你想要的样子。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。我所做的只是更改电子邮件是将以下内容添加到付款信息类中。

        protected function _construct() {
             parent::_construct();
             $this->setTemplate('payment/info/{new template}.phtml');
        }
        

        然后创建模板,如果使用此付款方式,电子邮件会将此模板插入到付款部分。

        希望对您有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多