我的Magento Checkout存在问题,当我以访客身份结帐时,它似乎无法识别用户在结算明细结算流程中输入的电子邮件地址。
任何人都可以解释如何写下面的内容,下面是我的伪代码:
if (Customer Email is EMPTY)
set Customer Email to email stored in the order object
我知道当我输出以下内容时,它会给我电子邮件地址(在观察者中):
$order = $observer->getEvent()->getOrder();
echo $order->getBillingAddress()->getEmail();
答案 0 :(得分:1)
您没有指定您尝试获取来宾电子邮件的部分,我将假设您希望它成功:
$order = Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
echo $order->getCustomerEmail();
编辑:对于结算后部分,以下内容应该有效。我在付款部分测试了它。
Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getEmail()
答案 1 :(得分:1)
首先在电子邮件字段上应用客户端验证。应用这些课程" validate-email required-entry
"在结帐页面上的电子邮件字段中,如
<input type="text" class="input-text validate-email required-entry" title="Email Address" value="" id="billing:email" name="billing[email]">
之后使用下面的代码来验证服务器端的电子邮件字段: 我假设您使用第三方扩展程序进行结帐。所以你需要调试什么控制器&amp;要求保存帐单地址的操作。例如,如果第三方扩展使用json或ajax,或者你需要手动调试,你可以在mozila浏览器中使用firebug。
在模块配置文件中,在填写帐单地址后调用事件上的观察者函数。
<events>
<controller_action_predispatch_[module]_[controller]_[action]>
<observers>
<Observer_Name>
<class>[Package]_[Module]_Model_Observer</class>
<method>checkEmail</method>
</Observer_Name>
</observers>
</controller_action_predispatch_[module]_[controller]_[action]>
</events>
创建一个观察者模型类:
class [Package]_[Module]_Model_Observer
{
public function checkEmail(Varien_Event_Observer $observer)
{
// example code
$data = $this->getRequest()->getPost('billing', array()); // you need to check what filed are posted for billing address or email address
if (!isset($data['email'])) {
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
}
希望这能帮到你!
答案 2 :(得分:0)
问题已解决 - 需要一个if语句,客户上没有客户对象因此总是失败... arrghh傻法师