在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循环里,所以会提取出所有打开的支付方式.
关于作者