1

Mage/Checkout/Model/Type/Onepage.phpに含まれる Checkout Model saveBilling()関数にイベントを追加するカスタム モジュールを作成しました。呼び出されるたびにイベントが適切に発生することは別として、モジュールは時折エラーをスローするようになりました。

Notice: Undefined property: Fla_Checkout_Model_Type_Onepage::$_customerEmailExistsMessage
in /home/magento/public_html/app/code/local/Fla/Checkout/Model/Type/Onepage.php
on line 154

モジュールの関連ビット、パブリック関数 saveBilling()のコードは、 dispatchEvent()行とその前のコメントを除いて、Magento コアとまったく同じです。エラーをスローするセクション:

<?php
class Fla_Checkout_Model_Type_Onepage extends Mage_Checkout_Model_Type_Onepage {
    public function saveBilling($data, $customerAddressId) {

        /* much code removed here as not relevant to question */

        /* This section throws error because $this->_customerEmailExistsMessage not found */


        if (!$this->getQuote()->getCustomerId() && self::METHOD_REGISTER == $this->getQuote()->getCheckoutMethod()) {
            if ($this->_customerEmailExists($address->getEmail(), Mage::app()->getWebsite()->getId())) {
                return array('error' => 1, 'message' => $this->_customerEmailExistsMessage);
            }
        }


        /* much code removed here as not relevant to question, below code works as intended*/

        /* Fiascolabs added event for exporting billing data */
        Mage::dispatchEvent('fla_billing_export', array('quote'=>$this->getQuote()));

        return array();
    }
}

Magento コア コードを参照すると、上部に、関数の上書きでアクセスされないように見えるいくつかの項目が宣言されています。

  1. 定数パブリック関数 __construct()は私のモジュールで利用できますか?

  2. 宣言された私的アイテムを複製するだけでよいですか?

問題のコードは以下のとおりです。

/**
 * Checkout types: Checkout as Guest, Register, Logged In Customer
 */
const METHOD_GUEST    = 'guest';
const METHOD_REGISTER = 'register';
const METHOD_CUSTOMER = 'customer';

/**
 * Error message of "customer already exists"
 *
 * @var string
 */
private $_customerEmailExistsMessage = '';

/**
 * Class constructor
 * Set customer already exists message
 */
public function __construct()
{
    $this->_helper = Mage::helper('checkout');
    $this->_customerEmailExistsMessage = $this->_helper->__('There is already a customer registered using this email address. Please login using this email address or enter a different email address to register your account.');
    $this->_checkoutSession = Mage::getSingleton('checkout/session');
    $this->_customerSession = Mage::getSingleton('customer/session');
}
4

1 に答える 1