Я создаю платежный модуль для Prestashop 1.7, и я пытаюсь использовать крючок DisplayPaymentByBinaries, потому что я не могу использовать кнопку отправки.
внизу вы найдете мой код:
public function hookDisplayPaymentByBinaries()
{
if (!Currency::exists('EUR', 0))
{
return '<p class="payment_module" style="color:red;">' .
$this->l('Payment Methods are only available when Euros are activated.') .
'</p>';
}
$issuer_setting = $this->getConfigValue('MY_ISSUERS');
try {
$methods = $this->api->methods->all();
$issuer_list = in_array($issuer_setting, array(self::ISSUERS_ALWAYS_VISIBLE, self::ISSUERS_ON_CLICK)) ? $this->_getIssuerList() : array();
} catch (MY_API_Exception $e) {
$methods = array();
$issuer_list = array();
if ($this->getConfigValue('MY_DEBUG_LOG') == self::DEBUG_LOG_ERRORS)
{
Logger::addLog(__METHOD__ . ' said: ' . $e->getMessage(), My::ERROR);
}
if ($this->getConfigValue('MY_DISPLAY_ERRORS'))
{
return
'<p class="payment_module" style="color:red;">' .
$e->getMessage() .
'</p>'
;
}
}
$this->setBinary = true;
$this->smarty->assign(array(
'methods' => $methods,
'issuers' => $issuer_list,
'issuer_setting' => $issuer_setting,
'images' => $this->getConfigValue('MY_IMAGES'),
'warning' => $this->warning,
'msg_pay_with' => $this->lang['Pay with %s'],
'msg_bankselect' => $this->lang['Select your bank:'],
'module' => $this,
));
return $this->display(__FILE__, 'my_methods.tpl');
}
Как описано prestashop:
Как вы могли прочитать выше, у вас не должно быть кнопки отправки в HTML-код вашего модуля, потому что PrestaShop автоматически сгенерирует ее. Если вы не можете удалить кнопку отправки из формы по каким-либо причинам (например: форма создается двоичными файлами), мы реализовали другой способ сделать ваш модуль совместимым с PrestaShp 1.7. Но учтите, что это НЕ рекомендуемый способ сделать это.
Для этого вам потребуется реализовать дополнительный перехватчик: displayPaymentByBinaries. Он предназначен для отображения формы оплаты и заменяет уникальную кнопку оплаты на кассе.
Вам также необходимо установить для двоичной переменной $ значение true. Он адаптирует поведение, чтобы скрыть кнопку оплаты и заменить ее формой при выборе варианта оплаты.
Я внедрил свой код, и мои варианты оплаты отображаются, но кнопка отправки все еще на месте. Как вы можете видеть в моей функции, я использовал:
$this->setBinary = true;
в заголовке файла я добавил:
use PrestaShop\PrestaShop\Core\Payment\PaymentOption;
Функция setBinary, которую я вызываю (из файла paymentoption):
public function setBinary($binary)
{
$this->binary = $binary;
return $this;
}
Может ли кто-нибудь помочь мне разобраться в том, что я здесь делаю не так? Другими словами, что мне нужно изменить, чтобы удалить кнопку отправки?
Заранее всем спасибо.
Ниже мой рабочий тент, благодаря @UnLoCo.
public function hookPaymentOptions($params)
{
if (!Currency::exists('EUR', 0))
{
return;
}
try {
$methods = $this->api->methods->all();
} catch (My_API_Exception $e) {
$methods = array();
if ($this->getConfigValue('My_DEBUG_LOG') == self::DEBUG_LOG_ERRORS)
{
Logger::addLog(__METHOD__ . ' said: ' . $e->getMessage(), My::ERROR);
}
return;
}
$payment_options = array();
foreach($methods as $method)
{
$newOption = new PaymentOption();
$newOption->setBinary(true);
$payment_options[] = $newOption;
}
return $payment_options;
}
hookPaymentOptions
код - person unloco   schedule 22.02.2017hookDisplayPaymentByBinaries
. Я обновил свой вопрос, чтобы показать людям, как реализовать двоичный код вhookPaymentOptions
. Я хотел попросить вас разместить в нем свой комментарий как awnser и рабочий код из моего вопроса. И отмечу твой тент как правильный. Еще раз спасибо за то, что указали мне правильное направление! - person Aurora   schedule 23.02.2017