1

这是关于我再次修补以查看此修改是否有效:

我修改了 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());
    }
}

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

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

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

因为首先我的目标只是从 onepage/checkout 输入中获取输入数据或发布数据,特别是 shipping[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>

我想要得到的只是这一个单一的 shipping[email] 输入,它有点问题,因为我已经坚持了很长时间。但是在提交单页/结帐后,我找不到获得其价值的方法。

任何帮助,将不胜感激。

4

1 回答 1

1

首先是您正在编辑核心文件。这是不受欢迎的。您可以轻松地从控制器获得运输电子邮件。使用事件吸收器比重写文件好。但这很难在写作中进行比较。

只需在 core->Mage->checkout->controllers 覆盖 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() 函数位于

app/code/core/Mage/Sales/Model/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 }}

如果您想编辑发票模板,那么您应该找到相应的函数来定义自定义电子邮件变量。就这样..!

于 2013-10-15T11:19:33.333 回答