在Magento中设置客户电子邮件

时间:2014-05-14 10:51:59

标签: magento frameworks magento-1.7 e-commerce

我的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();

3 个答案:

答案 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傻法师