Невозможно использовать $ this- & gt; db в пользовательском помощнике

У меня есть магазин 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

Решение

Первое: перестань делать то, что делаешь.

Второе: узнайте больше о 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']);

Рекомендуется пятое: включите ваши отчеты об ошибках, чтобы вы были осведомлены об ошибках, предупреждениях и уведомлениях и могли их исправить.

Это должно быть так.

1

Другие решения

Других решений пока нет …