Часто бывает потребность для лучшего продвижения интернет магазина выводить в описании категории таблицу ( список ) товаров. Данный список состоит из самого дорогого товара, самого дешевого, нового и популярного товара. Для реализации данного функционала можно обойтись без модулей, просто создав дополнительные запросы в модели, обработав данные в контроллере и вывести это все в шаблоне.
Товар с минимальной ценой
Для начала создадим дополнительную функцию в модели категории с запросом, которая будет доставать товар с минимальной ценой.
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 для отображения цены.
Товар с максимальной ценой
Для вывода товара с максимальной ценой необходимо выполнить такие же действия, только в модели прописать другую функцию и новый запрос
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;
}
Готовый модуль
Данные наработки мы упаковали в модуль. Если вам необходимо на сайте вывести таблицу со списком товаров ( самый дорогой, дешевый, популярный и новый товар ) то вы можете обратиться к нам в телеграмм. Мы поможем с установкой и доработкой модуля под ваш интернет-магазин.
Коментарі