【问题标题】:Set Customer Email in Magento在 Magento 中设置客户电子邮件
【发布时间】:2014-05-14 10:51:59
【问题描述】:

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

【问题讨论】:

    标签: magento frameworks magento-1.7 e-commerce


    【解决方案1】:

    您没有具体说明您在哪一部分尝试获取访客电子邮件,我假设您希望它成功:

     $order = Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
     echo $order->getCustomerEmail();
    

    编辑:对于结算后部分,下面应该可以工作。我在支付部分进行了测试。

    Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getEmail()

    【讨论】:

    • 它将在帐单详细信息部分之后,所以我想我需要销售/报价?
    【解决方案2】:

    首先在电子邮件字段上应用客户端验证。在结帐页面的电子邮件字段中应用这些类“validate-email required-entry”,例如

    <input type="text" class="input-text validate-email required-entry" title="Email Address" value="" id="billing:email" name="billing[email]">

    之后使用以下代码验证服务器端的电子邮件字段: 我假设您正在使用第三方扩展程序进行结帐。所以你需要调试保存帐单地址所需的控制器和操作。例如,如果第三方扩展使用 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));
                }
    
            }
    
        }
    

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      问题已修复 - 需要一个 if 语句,因此客户机上没有客户对象因此总是失败... arrghh silly Mage

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-15
        • 2014-05-17
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        相关资源
        最近更新 更多