Часто буває потреба для кращого просування інтернет-магазину виводити в описі категорії таблицю (список) товарів. Даний список складається з найдорожчого товару, найдешевшого, нового та популярного товару. Для реалізації даного функціоналу можна обійтися без модулів, просто створивши додаткові запити в моделі, обробивши дані в контролері і вивести все це в шаблоні.
Товар із мінімальною ціною
Для початку створимо додаткову функцію в моделі категорії із запитом, яка діставатиме товар із мінімальною ціною.
public function getProductWithMinPrice($category_id){
$query = $this->db->query("SELECT pd.name, IFNULL(ps.price,p.price) AS curent_price, p.*
FROM " . DB_PREFIX . "product p
INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
LEFT JOIN `" . DB_PREFIX . "product_special` ps ON (ps.product_id = p.product_id)
AND (ps.date_start <= CURDATE() AND (ps.date_end <=CURDATE() OR ps.date_end = '0000-00-00'))
WHERE p2c.category_id = '". (int) $category_id ."' AND p.status = '1' AND p.quantity > 0 AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
ORDER BY curent_price ASC LIMIT 0,1 ");
return $query->row;
}
Після додавання цієї функції необхідно в контролері категорії викликати цю функцію і передати в шаблон.
//Дістаємо поточну категорію
$parts = explode('_', (string)$this->request->get['path']);
$category_id = (int)array_pop($parts);
//викликаємо метод із моделі
$prodWithMinPrice = $this->model_catalog_category->getProductWithMinPrice($category_id);
// передаємо дані на шаблон
$data['minPriceName'] = $prodWithMinPrice['name'];
$data['minPriceLink'] = $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $prodWithMinPrice['product_id']);
У шаблоні (category.tpl) необхідно просто вивести змінні $minPriceName and $minPriceLink на екран. Таким чином у вас відобразиться назва товару та посилання на нього. Для відображення ціни товару необхідно додати у контролері перевірку на знижку
if(empty($prodWithMinPrice['curent_price'])){
$data['minPriceValue'] = $prodWithMinPrice['price'];
}else {
$data['minPriceValue'] = $prodWithMinPrice['curent_price'];
}
У файлі category.tpl вивести $minPriceValue для відображення ціни.
Товар із максимальною ціною
Для виведення товару з максимальною ціною необхідно виконати такі ж дії, nbsp; тільки в моделі прописати іншу функцію та новий запит
public function getProductWithMaxPrice($category_id){
$query = $this->db->query("SELECT pd.name, IFNULL(ps.price,p.price) AS curent_price, p.*
FROM " . DB_PREFIX . "product p
INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
LEFT JOIN `" . DB_PREFIX . "product_special` ps ON (ps.product_id = p.product_id)
AND (ps.date_start <= CURDATE() AND (ps.date_end <=CURDATE() OR ps.date_end = '0000-00-00'))
WHERE p2c.category_id = '". (int) $category_id ."' AND p.status = '1' AND p.quantity > 0 AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
ORDER BY curent_price DESC LIMIT 0,1 ");
return $query->row;
}
Найпопулярніший товар
public function getProductWithMaxReviewed($category_id){
$query = $this->db->query("SELECT p.*, pd.name
FROM " . DB_PREFIX . "product p
INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
WHERE p2c.category_id = '". (int) $category_id ."'
AND p.status = '1' AND p.quantity > 0
AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
ORDER BY p.viewed DESC LIMIT 0,1"
);
return $query->row;
}
Найновіший товар
public function getProductNew($category_id){
$query = $this->db->query("SELECT pd.name, p.`date_added`, p.*
FROM " . DB_PREFIX . "product p
INNER JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)
INNER JOIN " . DB_PREFIX . "product_description pd ON (pd.product_id = p.product_id)
WHERE p2c.category_id = '". (int) $category_id ."' AND p.status = '1' AND p.quantity > 0 AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
ORDER BY p.`date_added` DESC LIMIT 0,1
");
return $query->row;
}
Готовий модуль
Дані напрацювання ми запакували в модуль. Якщо вам необхідно на сайті вивести таблицю зі списком товарів (найдорожчий, дешевий, популярний і новий товар), то ви можете звернутися до нас у телеграм. Ми допоможемо з встановленням та доопрацюванням модуля під ваш інтернет-магазин.
Коментарі