У меня есть магазин 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
должным образом.
Единственная проблема связана с подключением к БД. Это правильный способ выполнить запрос к БД?
Кто-нибудь сталкивался с такой проблемой?
Первое: перестань делать то, что делаешь.
Второе: узнайте больше о 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']);
Рекомендуется пятое: включите ваши отчеты об ошибках, чтобы вы были осведомлены об ошибках, предупреждениях и уведомлениях и могли их исправить.
Это должно быть так.
Других решений пока нет …