Как я могу сделать поля для ввода адреса необязательными на странице экспресс-проверки PayPal?
Вопрос
Итак, как следует из моего названия..
Я знаком с тем, как это сделать при выставлении счетов на одностраничной кассе (
- сделать атрибуты необязательными в
eav attributes
таблица в базе данных, - скопируйте
Customer/Model/Address.php
файл редактирует соответствующую проверку в методе "validate").
Однако это не помогло на странице экспресс-проверки PayPal, и это не позволит пользователю оформить заказ, указав:
"Неверный адрес для выставления счета.Поле "ГОРОД" обязательно для заполнения"
Должен быть похожий файл (для Abstract.php
), который проверяет данные перед отправкой, но я просто не могу их отследить.Любой, кто может или уже знает, пожалуйста, прислушайтесь к призыву - сообщество вполне может извлечь из этого пользу, так же как и я.Если вам понадобится дополнительная информация, дайте мне знать.Спасибо
Решение
Я ненавижу публиковать ответы на свои собственные вопросы, но, похоже, как тот, кто нуждается в этом больше всего, я прошел здесь дистанцию..как это слишком часто бывает..
Итак, после опробования многочисленных техник, включая:
1) создание атрибутов, которые не требуются в eav attributes
таблица в базе данных;
2) программное добавление этих обязательных полей в базу данных при обновлении счета (с событием)
Лучшее, что я придумал и что работает (очень хорошо), - это создать скрытые поля для любых полей, которые являются обязательными, но не релевантными - в моем случае city
, region
и postcode
- и включите их в форму.Я считаю, что самый простой способ сделать это - создать функцию для этого в файле пользовательского модуля следующим образом (изменение $inputFields_arr
чтобы соответствовать обязательным полям, которые вы хотите проигнорировать):
public function getRequiredNotRequestedInputs($prefix) { // fill in input values required but not wanted
$value = 'NOT REQUESTED';
$inputFields_arr = array('city', 'region', 'postcode'); // required fields that we don't need/request
foreach($inputFields_arr as $inputField) {
$return_arr[] = '<input type="hidden" name="'.$prefix.'['.$inputField.']" id="'.$prefix.':'.$inputField.'" value="'.$value.'" />';
}
return implode('',$return_arr);
}
Тогда назовите это так:
<?php echo $moduleFile->getRequiredNotRequestedInputs('billing'); // set city, postcode, etc ?>
.. из любой точки, которую вы хотите (где $moduleFile
это файл, в котором вы сохранили вышеупомянутую функцию).В моем случае я уже обращался к этому:
app/design/frontend/default/YOUR-TEMPLATE/template/YOUR-CUSTOM-LAYOUT/checkout/billing.phtml
Я знаю, что есть те, кто захочет сделать это быстрым и неприятным способом (и это ваше преимущественное право), поместив скрытые поля непосредственно в локальный файл интерфейса (и переопределив ядро), но после того, как вы научитесь использовать пользовательские модули со всем, что сможете, это не только поможет вам обновляться (хорошо услышанная проповедь), но и будет поддерживать порядок, и для меня это больше, чем половина дела.Надеюсь, это будет полезно другим.