这是关于我再次修补,看看这个修改是否有效:
我修改了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>
所有我想要的是这一个单一的发送[电子邮件]输入,它有点儿车,因为我已经坚持了这么久。但在提交一页/结帐后,我无法找到获得价值的方法。
任何帮助都将不胜感激。
答案 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 }}
如果您想要编辑发票模板,那么您应该找到相应的功能来定义自定义电子邮件变量。这就是全部..!