付款选择上的 Opencart 额外字段

Posted

技术标签:

【中文标题】付款选择上的 Opencart 额外字段【英文标题】:Opencart extra field on payment select 【发布时间】:2013-06-05 23:01:12 【问题描述】:

我正在尝试将 Automatic Incasso 添加到网上商店。一切都完成了,但是现在,我想对其进行调整。

在线测试网站为:g7.rjbtest.nl

我希望如果您在第 5 步选择自动 incasso,在继续按钮之前的底部添加一个字段,您必须在其中输入您的银行帐号。现在是第 6 步,但不是用户友好。

问题很简单。是否有可能,如果有,如何获得一个额外的字段,用户必须在其中输入银行帐号,与他们选择自动 incasso 的步骤相同。

即使你只能为我指明正确的方向,我也会非常高兴。

编辑

这是我在/catelog/controller/paymemt/incasso.php 中获得的代码

<?php
class ControllerPaymentIncasso extends Controller 
    protected function index() 
        $this -> language -> load('payment/incasso');

        $this -> data['text_instruction'] = $this -> language -> get('text_instruction');
        $this -> data['text_description'] = $this -> language -> get('text_description');
        $this -> data['text_payment'] = $this -> language -> get('text_payment');
        $this -> data['text_number_insert'] = $this -> language -> get('text_number_insert');
        $this -> data['bankNumberError'] = $this -> language -> get('bankNumberError');

        $this -> data['button_confirm'] = $this -> language -> get('button_confirm');

        $this -> data['bank'] = nl2br($this -> config -> get('incasso_bank_' . $this -> config -> get('config_language_id')));

        $this -> data['continue'] = $this -> url -> link('checkout/success');

        if (file_exists(DIR_TEMPLATE . $this -> config -> get('config_template') . '/template/payment/incasso.tpl')) 
            $this -> template = $this -> config -> get('config_template') . '/template/payment/incasso.tpl';
         else 
            $this -> template = 'default/template/payment/incasso.tpl';
        

        $this -> render();
    

    public function confirm() 
        $this -> language -> load('payment/incasso');

        $this -> load -> model('checkout/order');
        $this -> load -> model('payment/incasso');

        $comment = $this -> language -> get('text_instruction') . "\n\n";
        $comment .= $this -> config -> get('incasso_bank_' . $this -> config -> get('config_language_id')) . "\n\n";
        $comment .= $this -> language -> get('text_payment');

        $this -> model_checkout_order -> confirm($this -> session -> data['order_id'], $this -> config -> get('incasso_order_status_id'), $comment, true);

        $rekNum = $_GET['rn'];
        $this -> model_payment_incasso -> insertRekNum($this -> session -> data['order_id'], $rekNum);
    


?>

catelog/model/payment/incasso.php

<?php
class ModelPaymentIncasso extends Model 
    public function getMethod($address, $total) 
        $this -> language -> load('payment/incasso');

        $query = $this -> db -> query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$this -> config -> get('incasso_geo_zone_id') . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");

        if ($this -> config -> get('incasso_total') > 0 && $this -> config -> get('incasso_total') > $total) 
            $status = false;
         elseif (!$this -> config -> get('incasso_geo_zone_id')) 
            $status = true;
         elseif ($query -> num_rows) 
            $status = true;
         else 
            $status = false;
        

        $method_data = array();

        if ($status) 
            $method_data = array('code' => 'incasso', 'title' => $this -> language -> get('text_title'), 'sort_order' => $this -> config -> get('incasso_sort_order'));
        

        return $method_data;
    

    public function insertRekNum($orderNum, $rekNum) 
        $sql = "INSERT INTO  `" . DB_PREFIX . "order_incasso` (
                    `order_id` ,
                    `iban`
                    )
                    VALUES (
                    '$orderNum',  '$rekNum'
                    );";
        $this -> db -> query($sql);
    


?>

catelog/view/theme/default/template/payment/incasso.tpl

<h2><?php echo $text_instruction; ?></h2>
<div class="content">
    <p><?php echo $text_description; ?></p>
    <p><?php echo $bank; ?></p>
    <p><?php echo $text_payment; ?></p>
</div>
<div class="buttons">
    <div class="left" >
        <?php echo $text_number_insert; ?> <input type="text" value="" id="bankAccountNumber" />
    </div>
    <div class="right">
        <input type="button" value="<?php echo $button_confirm; ?>" id="button-confirm" class="button" />
    </div>
</div>
<script type="text/javascript">
$('#button-confirm').bind('click', function() 
    var bankNumber = $("#bankAccountNumber").val();
    if(bankNumber.trim() == "")
        alert("<?php echo $bankNumberError; ?>");
        return false;
    
    $.ajax( 
        type: 'get',
        url: 'index.php?route=payment/incasso/confirm&rn=' + bankNumber,
        success: function() 
            location = '<?php echo $continue; ?>';
               
    );
);
</script> 

【问题讨论】:

嗯,很好。究竟是什么问题? @shadyyx,很抱歉这个不清楚的问题。希望更新后的版本更好理解... 您能否发布一些关于它是如何完成的的代码,或者我们应该从星星中猜测吗? :-) @shadyyx,当然。我怎么会这么愚蠢地忘记这一点:D我已经更新了问题...... 【参考方案1】:

唯一想到的是:

    更新payment.tpl模板并在呈现付款选项后在此处添加银行帐户输入 添加一个 JS 代码,该代码将立即隐藏输入或使其不被内联 CSS 显示(我更喜欢内联 CSS 之前的 JS) 添加JS代码将处理支付无线电change事件以及选中 incasso em>付款选项,显示银行帐户输入或隐藏它否则 从您的 incasso.tpl 添加 JS 代码,将银行帐户存储到 DB...

这应该是最简单的解决方案了……

【讨论】:

我没想到...我明天会继续工作,但我会及时通知您。无论如何谢谢你:D

以上是关于付款选择上的 Opencart 额外字段的主要内容,如果未能解决你的问题,请参考以下文章

Opencart。信用卡付款

OpenCart跨境erp哪个好用?

如何更改 OpenCart 产品页面上的原始价格?

Opencart 结帐我的 sql 错误

接受Android和IOS App上的部分付款

Opencart 中的支付网关集成