我有一个Opencart商店v.1.5.4并且我已经构建了一个自定义助手system/helper/variants.php
。我创建了一个从数据库中获取数据的函数:
function countproductvariant() {
$newdb = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); $registry->set(‘db’, $db);
$registry->set(‘newdb’, $newdb);
$query = $newdb->query("SELECT count(*) as variants FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int) $product_id . "' AND od.language_id = '" . (int) $this->config->get('config_language_id') . "' ORDER BY o.sort_order");
return $query->row['variants'];
}
我在我的controller/product/product.php
中使用了这个:
$this->data['variantcount'] = countproductvariant();
并在view/.../template/product/product.tpl
echo $variantcount;
我得到的只是一个空白屏幕。如果我删除所有查询并使用return '0';
,则表示正确返回0
。
唯一的问题是数据库连接。这是运行数据库查询的正确方法吗?
有没有人遇到过这种问题?
答案 0 :(得分:1)
首先:停止做你在做什么。
第二:阅读有关MVC的更多信息。 OpenCart也是使用MVC实现的,你应该遵循这个标准。
第三:你不需要帮助。只需在catalog/model/catalog/product.php
文件中定义该方法,即ModelCatalogProduct
类。该方法应如下所示:
public function count_product_variant($product_id) {
$query = $this->db->query("SELECT COUNT(*) AS variants FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int) $product_id . "' AND od.language_id = '" . (int) $this->config->get('config_language_id') . "' ORDER BY o.sort_order");
return $query->row['variants'];
}
第四:在您的控制器中,产品型号应该已经初始化(找到行$this->load->model('catalog/product');
并将此代码放在此行之后的某处):
$this->data['variant_count'] = $this->model_catalog_product->count_product_variant($this->request->get['product_id']);
建议第五:打开您的错误报告,以便您明白错误,警告和通知,并可以修复它们。
应该是它。