Как программно добавить дополнительные поля к способу оплаты на экране оформления заказа?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

03.08.2011 16:22

Создал платежный модуль на основе существующего (BankPayment).
Понадобилось мне доб. несколько текстовых полей для данных и с этим возникли проблемы.
Данные которые я ввожу в свои текстовые поля не сохраняются, при ошибке валидации в форме я до них достучатся тоже не могу.
Анализировал код и содержимое объектов, такое ощущение что можно орудовать только с полями которые нужны для оплаты кредитками (cc_number и т.д.). Натолкнулся в одном модуле на заполнение поля aditional_data сделал в модуле метод
public function assignData($data)
    {
        if (!($data instanceof Varien_Object)) {
            $data = new Varien_Object($data);
        }

        $details = array();

        if ($data->getNamepayer()) {
            $details['namepayer'] = $data->getNamepayer();
        }

        if ($data->getNamepayer()) {
            $details['addresspayer'] = $data->getAddresspayer();
        }

        if ($data->getNamepayer()) {
            $details['bankdetailspayer'] = $data->getBankdetailspayer();
        }

        if (!empty($details)) {
            $this->getInfoInstance()->setAdditionalData(serialize($details));
        }

        return $this;
    }

Но потом из form.phtml достучатся не получается, объект Info пустой...
Уже бьюсь 1.5 дня и не врублюсь откуда ноги растут.
Гуглил но нечего путевого не нарыл, пытался найти модули для примера, но те которые устанавливал тоже оперируют сс_number и т.д.

Буду очень благодарен за помощь.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

03.08.2011 17:06

Просмотр сообщенияIgorN (03.08.2011 16:22) писал:

Данные которые я ввожу в свои текстовые поля не сохраняются


А что лично вы делаете для сохранения этих данных?

#3 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

04.08.2011 09:51

Выше показал - метод модели. У некоторых модулей все автоматом происходит так как они юзают стандартные поля cc_number и т.д.
В принципе, данные сохраняются и при просмотре заказа отображаются. но хотелось бы, что бы при ошибке валидации можно было поля заполнить, но не получается достучатся.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

04.08.2011 10:24

cc_number - это системное поле, оно действительно сохраняется автоматически.
Ваши нестандартные данные вы должны сохранять самостоятельно.
Ваш указанный выше метод ничего не сохраняет в БД.

#5 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

04.08.2011 11:32

А setAdditionalData? Потом же при просмотре заказа после его создания, данные в этом поле есть

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

04.08.2011 11:43

К какому классу относится объект $this?

#7 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

04.08.2011 12:11

class Pro_BillExchange_Model_BillExchange extends Mage_Payment_Model_Method_Abstract

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

04.08.2011 12:51

Используйте свою таблицу для хранения своих данных.
Метод setAdditionalData - внутренний для способа оплаты Checkmo, и setAdditionalData ничего в базу не сохраняет, Checkmo использует его для хранения-передачи своих внутренних данных.

#9 IgorN
  • Группа: Пользователь
  • Сообщений: 293
  • Регистрация: 09.03.2011

04.08.2011 15:05

Я надеялся, что все проще :(, а почитать где то можно?
Это получается я должен создать свою таблицу, классы ресурсов и т.д.?

P.S. А есть модуль который можно взять за пример? А то думаю запарюсь...

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

04.08.2011 15:16

Да, надо создать установочный скрипт для БД, а также классы-модели и классы-ресурсы.
В качестве примера можно взять любой модуль с открытым кодом, который создает таблицы, в том числе какой-либо модуль стандартной комплектации, например Mage_Review.

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

14.08.2012 17:26

Вот в качестве примера можно посмотреть программный код платёжного модуля «QIWI Кошелёк» Российской сборки Magento.
Этот модуль при оформлении заказа спрашивает номер телефона покупателя.

Поделиться темой: