结帐观察员修改1.7+

时间:2013-10-15 10:38:18

标签: magento magento-1.7

这是关于我再次修补,看看这个修改是否有效:

我修改了Mage / Checkout / Model / Observer.php:

public function salesQuoteSaveAfter($observer)
{
    $quote = $observer->getEvent()->getQuote();
    Start of added code --- > $post = Mage::app()->getRequest()->getPost();//Mage::app()->getRequest()->getPost();
    if(isset($post['shipping']['email'])){
        if(isset($_SESSION['emailadd'])){
            unset($_SESSION['emailadd']);
            $_SESSION['emailadd'] = 'test2@mail.com';//$post['shipping']['email'];
        }else{
            $_SESSION['emailadd'] = 'test@mail.com';//$post['shipping']['email'];
        }
    }else{
        if(isset($_SESSION['emailadd'])){
            unset($_SESSION['emailadd']);
            $_SESSION['emailadd'] = 'test3@mail.com';//$post['shipping']['email'];
        }else{
            $_SESSION['emailadd'] = 'test4@mail.com';//$post['shipping']['email'];
        }
    }   <--End of added code;
    /* @var $quote Mage_Sales_Model_Quote */
    if ($quote->getIsCheckoutCart()) {
        Mage::getSingleton('checkout/session')->getQuoteId($quote->getId());
    }
}

问题是这段代码:没有返回任何设置会话的内容['emailadd'] = test4@mail.com

$post = Mage::app()->getRequest()->getPost();

如果我的代码方法错误,如何添加在数据库中发送数据之前调用的salesQuoteSaveBefore()方法?在这之前是否有要配置的XML?

因为我的目标首先是获取输入数据或从onepage / checkout输入发布数据,特别是发送[email]输入,不要告诉我没有,因为有:

<li>
            <div class="input-box">
                <label for="shipping:emailadd"><?php echo $this->__('Email Address') ?> <span class="required">*</span></label><br />
                <input type="text" name="shipping['email']" id="shipping:emailadd" value="<?php echo $this->htmlEscape($this->getAddress()->getEmail()) ?>" title="<?php echo $this->__('Email Address') ?>" class="validate-email required-entry input-text" />
            </div>
            <div class="input-box">
                <label for="shipping:emailadd"><?php echo $this->__('Confirm Email') ?> <span class="required">*</span></label><br />
                <input type="text" name="shipping[emailconfirm]" id="shipping:emailconfirm" value="<?php echo $this->htmlEscape($this->getAddress()->getEmail()) ?>" title="<?php echo $this->__('Email Address') ?>" class="validate-email required-entry input-text" />
            </div>
        </li>

所有我想要的是这一个单一的发送[电子邮件]输入,它有点儿车,因为我已经坚持了这么久。但在提交一页/结帐后,我无法找到获得价值的方法。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您正在编辑核心文件。这是不受欢迎的。  您可以从控制器轻松获得发送邮件。使用Event Absorber比编写文件更好。但这与写作相比很难比较。

只需在core-&gt; Mage-&gt; checkout-&gt;控制器上覆盖OnepageController.php。

这是代码,

include_once("Mage/Checkout/controllers/OnepageController.php");  


    class Pakagename_Modulename_OnepageController extends Mage_Checkout_OnepageController
{
public function saveBillingAction()
    {
        if ($this->_expireAjax()) {
            return;
        }
        if ($this->getRequest()->isPost()) {
//            $postData = $this->getRequest()->getPost('billing', array());
//            $data = $this->_filterPostData($postData);
            $data = $this->getRequest()->getPost('billing', array());
            $customerAddressId = $this->getRequest()->getPost('billing_address_id', false);

            if (isset($data['email'])) {
                $data['email'] = trim($data['email']);
            }

此问题是客户可能会使用不同的电子邮件进行运送和结算。因此,您需要签出送货和结算保存操作。

添加到会话

$email = $data['email'];
Mage::getSingleton('core/session')->setMyValue($email); 

然后在这里我假设您正在尝试编辑订单电子邮件模板。 1)编辑位于

中的sendNewOrderEmail()函数

应用程序/代码/核心/法师/销售/型号/ Order.php

$my_email = Mage::getSingleton('core/session')->getMyValue();
 $mailer->setTemplateParams(array(
          'order'        =>  $this,
          'billing'      =>  $this->getBillingAddress(),
          'payment_html' => $paymentBlockHtml,
          'my_email'  => "$my_email" //New custom value
       ));

然后,您可以像这样获取该电子邮件

{{ var my_email }}

如果您想要编辑发票模板,那么您应该找到相应的功能来定义自定义电子邮件变量。这就是全部..!