Prestashop 1.7 DisplayPaymentByBinaries 支付模块挂钩
Prestashop 1.7 DisplayPaymentByBinaries hook for paymentmodule
我正在为 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。它用于显示付款表单,它将取代结帐中唯一的付款按钮。
您还需要将 $binary 变量设置为 true。它将调整行为以隐藏支付按钮并在选择支付选项时将其替换为表单。
我已经实现了我的代码并且显示了我的支付选项,但提交按钮仍然存在。正如您在我的函数中看到的那样,我使用了:
$this->setBinary = true;
在我添加的文件的 header 中:
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;
}
解决方案是在返回的支付选项中将二进制设置为 true
public function hookPaymentOptions($params)
{
//...
$payment_option = new PaymentOption();
$payment_option->setBinary(true);
return array(
$payment_option
);
}
我正在为 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。它用于显示付款表单,它将取代结帐中唯一的付款按钮。
您还需要将 $binary 变量设置为 true。它将调整行为以隐藏支付按钮并在选择支付选项时将其替换为表单。
我已经实现了我的代码并且显示了我的支付选项,但提交按钮仍然存在。正如您在我的函数中看到的那样,我使用了:
$this->setBinary = true;
在我添加的文件的 header 中:
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;
}
解决方案是在返回的支付选项中将二进制设置为 true
public function hookPaymentOptions($params)
{
//...
$payment_option = new PaymentOption();
$payment_option->setBinary(true);
return array(
$payment_option
);
}