无法在自定义帮助程序中使用$ this-> db

时间:2014-10-27 05:31:11

标签: php database connection opencart helpers

我有一个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

唯一的问题是数据库连接。这是运行数据库查询的正确方法吗?

有没有人遇到过这种问题?

1 个答案:

答案 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']);

建议第五:打开您的错误报告,以便您明白错误,警告和通知,并可以修复它们。

应该是它。

相关问题