Добрый день
Подскажите пожалуйста как решить проблему
при оформлении заказа гостем, на 2 шаге "Информация о плательщике" вываливается собщение "Имя не может быть пустым., Фамилия не может быть пустой",
при этом все имеющиеся поля были предварительно заполнены.
Из моих наблюдений после 2 шага если галка "Использовать адрес плательщика" установлена то все информация в 3 шаге должна подтягивается из 2-го, но по некоторой причине этого не происходит.
в консоли никаких ошибок нет. В файлы php, js, никто правки не вносил.
Установлен модуль "Customer Attributes meneger", проблема возникла после правок некоторых позиций. После обнаружения проблемы все правки востановили в первоначальное состояние но проблему это не решило.
Буду благодарен за помошь.
Проблема возникает из-за расширения. Для некоторых полей почему-то не получают проверены.
Вы должны проверить, если ID и class из этих поле соответствует шаблон Magento по умолчанию
В начале у меня тоже быбо такое мнение, я сверил с базовой установкой с установленым этим модулем поля firstname, lastname полностью соответствуют, помимо этого даный модуль вообще не позволяет изменить код существующего атрибута, т.е. изменить код "firstname", "lastname" сознательно хотел но у меня это не получилось, ID изменить также невозможно.
Можно совсем удалить адрибут, но тогда при повторном его создании он будет иметь другой ID.
Но сверяя из мускуля коды и ID этих параметров - они полностью идентичны.
Открючение этого "Customer Attributes meneger" модуля так же не дало положителных результатов
У вас есть адресс где можно посмотреть?
Обычно это связанно с классами проверки, я думаю скорее всего првоерка стоит не та то поле, или ищет дополнительное или скрытое поле.
да конечно же
предварительно нужно что либо положить в корзину,
glasstrend.ru/checkout/onepage
Вроде отправляет корректную информацию.
Возможно конфликт полей. Надо смотреть что принимает контроллер.
Но для начала убедитесь что выключен любой Кэш, и режим компиляции выключен. Он доступен в System->Tools->Compilation
Лог :
billing[address_id] billing[city] Brooklyn billing[confirm_password] billing[country_id] RU billing[customer_password... billing[email] test@gmail.com billing[fax] billing[firstname] test billing[lastname] test billing[postcode] 11229 billing[region] billing[region_id] 498 billing[save_in_address_b... 1 billing[street][] street1 billing[telephone] 123123123 billing[use_for_shipping] 1
да это в дебагере я видел,
Компиляция отключена,
можете подсказать в каком контролере нужно отловить данные?
Проверка скорее всего в модели
Mage_Customer_Model_Customer::validate()
Глянуть трэйс и смотреть что и где теряется.
вот фрагмент объект Mage_Sales_Model_Quote_Address
https://www.dropbox.com/s/ht17o8lwe9ozai9/Mage_Sales_Model_Quote_Address%20Object.txt?dl=0
правда для меня он мало информативный, у кого то есть идеи/предложения?
валидация происходит в функции saveBlling - app/code/core/Mage/Checkout/Model/Type/Onepage.php
1) Проверьте какое из условий выдает ошибку
$address->importCustomerAddress($customerAddress)->setSaveInAddressBook(0); $addressForm->setEntity($address); $addressErrors = $addressForm->validateData($address->getData()); if ($addressErrors !== true) { return array('error' => 1, 'message' => $addressErrors); }
2)
// validate billing address if (($validateRes = $address->validate()) !== true) { return array('error' => 1, 'message' => $validateRes); }
Для первого случая проверьте какой из атрибутов выдает ошибку в app/code/core/Mage/Eav/Model/Form.php Line 390
/** * Validate data array and return true or array of errors * * @param array $data * @return boolean|array */ public function validateData(array $data) { $errors = array(); foreach ($this->getAttributes() as $attribute) { if ($this->_isAttributeOmitted($attribute)) { continue; } $dataModel = $this->_getAttributeDataModel($attribute); $dataModel->setExtractedData($data); if (!isset($data[$attribute->getAttributeCode()])) { $data[$attribute->getAttributeCode()] = null; }
$result = $dataModel->validateValue($data[$attribute->getAttributeCode()]);
/* Check attribute Code & Result */ if ($result !== true) { $errors = array_merge($errors, $result); } } if (count($errors) == 0) { return true; } return $errors; }