0

我正在为 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;

在我添加的文件的标题中:

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;
}
4

1 回答 1

1

解决方案是在返回的付款选项中将二进制设置为 true

public function hookPaymentOptions($params)
{
    //...

    $payment_option = new PaymentOption();
    $payment_option->setBinary(true);

    return array(
        $payment_option
    );    
}
于 2017-02-23T13:43:04.713 回答