通过清心醉

opencart前台获取支付方式的方法

在checkout.tpl视图文件里,进行了ajax的请求#collapse-payment-method

然后我们来看看请求的payment-method控制器

在index方法里

有这么几句:

$this->load->model(‘extension/extension’);
$results = $this->model_extension_extension->getExtensions(‘payment’);
$recurring = $this->cart->hasRecurringProducts();
foreach ($results as $result) {
if ($this->config->get($result[‘code’] . ‘_status’)) {
$this->load->model(‘payment/’ . $result[‘code’]);
$method = $this->{‘model_payment_’ . $result[‘code’]}->getMethod($this->session->data[‘payment_address’], $total);
if ($method) {
if ($recurring) {
if (method_exists($this->{‘model_payment_’ . $result[‘code’]}, ‘recurringPayments’) && $this->{‘model_payment_’ . $result[‘code’]}->recurringPayments()) {
$method_data[$result[‘code’]] = $method;
}
} else {
$method_data[$result[‘code’]] = $method;
}
}
}
}

作者前文写的安装配置,是因为要遵循opencart的模块规则标准,而如果定义为插件了的话

除了自定义的数据表,还会追加写入extension扩展表及setting环境配置表(可以当成为开关表)

在需要的时候,首先extension里提取当前需要使用的扩展类型

在$results = $this->model_extension_extension->getExtensions(‘payment’);这一句就可以看到

而且getExtensions的原型是:

function getExtensions($type) {
$query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “extension WHERE `type` = ‘” . $this->db->escape($type) . “‘”);

return $query->rows;
}

我们在来看数据库参数:

extension表

‘extension_id’=>’234’
‘type’=>’payment’
‘code’=>’ckzalipay’

当获取了扩展插件名之后,在获取插件的当前状态.$this->config->get($result[‘code’] . ‘_status’);

接着引用模型文件$this->load->model(‘payment/’ . $result[‘code’]);

其实等价于$this->load->mode(‘payment/ckzalipay’);

然后强制调用getMethod方法

$method = $this->{‘model_payment_’ . $result[‘code’]}->getMethod($this->session->data[‘payment_address’], $total);

等价于$method = $this->model_payment_ckzalipay->getMethod($this->session->data[‘payment_address’], $total);

getMethod($address, $total)里就是显示支付列表的参数

因为是在foreach循环里,所以会提取出所有打开的支付方式.

 

 

 

 

 

 

 

关于作者

清心醉 administrator

发表评论

请输入验证码: