Хочу слегка модифицировать blocknewproducts

Автор yuazakharov, 14 ноября 2015, 18:10:04

« назад - далее »

yuazakharov

Добрый вечер! Народ, помогите пожалуйста исключить показ товаров из определенной категории в blocknewproducts.
В файле blocknewproducts_home.tpl сделал так:
{if isset($new_products) && $new_products && $category->id != 18}
    {include file="$tpl_dir./product-list.tpl" products=$new_products class='blocknewproducts tab-pane' id='blocknewproducts'}

Все равно их видно.

mAgency

#1
$category->id
В шаблоне неизвестно.

Чтобы в модуле исключить показ по категории, нужно в классе Product.php переделать функцию getNewProducts, добавить передачу в эту функцию ид категории и в классе модуля ислючать из показа товары по ид категории.
public static function getNewProducts($id_lang, $page_number = 0, $nb_products = 10, , $id_category = null, $count = false, $order_by = null, $order_way = null, Context $context = null){
в запрос sql
WHERE ...
($id_category ? ' AND c.`id_category` <> '.(int)$id_category : '').

в модуле blocknewproducts.php в getNewProducts()
Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'), 18);
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

yuazakharov

#2
Цитата: mAgency от 14 ноября 2015, 18:25:47
в запрос sql
WHERE ...
($id_category ? ' AND c.`id_category`<>'.(int)$id_category : '').

Благодарю за быстрый отклик!
Все сделал как вы написали.  В sql-е вроде ничего не изменили.
Все равно товары категории видны

DarinSr

Продукт может принадлежать множеству категорий. Можно не показывать товары для категории по умолчанию (основной), для этого в шаблоне /themes/default-bootstrap/product-list.tpl добавить,
{foreach from=$products item=product name=products}
    {if $product->id_category_default != 'id категории'}

но тогда не будут показанны товары для этой категории на всем сайте во всех модулях.

PrestaMan

#4
Цитата: mAgency от 14 ноября 2015, 18:25:47
$category->id
В шаблоне неизвестно.

Чтобы в модуле исключить показ по категории, нужно в классе Product.php переделать функцию getNewProducts, добавить передачу в эту функцию ид категории и в классе модуля ислючать из показа товары по ид категории.
public static function getNewProducts($id_lang, $page_number = 0, $nb_products = 10, , $id_category = null, $count = false, $order_by = null, $order_way = null, Context $context = null){
в запрос sql
WHERE ...
($id_category ? ' AND c.`id_category` <> '.(int)$id_category : '').

в модуле blocknewproducts.php в getNewProducts()
Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'), 18);

Нужно еще и таблицу категорий включить в запрос, тогда можно будет в запросе не учитывать по переданному ид категорий
$sql->join('JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = p.id_product)');
$sql->where('cp.`id_category` <> '. $id_category);


Или по основной категории id_category_default.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

yuazakharov

Цитата: PrestaMan от 15 ноября 2015, 12:39:19
Нужно еще и таблицу категорий включить в запрос, тогда можно будет в запросе не учитывать по переданному ид категорий
$sql->join('JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = p.id_product)');
$sql->where('cp.`id_category` <> '. $id_category);


Или по основной категории id_category_default.
Вот теперь не показывает. Благодарю!

yuazakharov

Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'), 18);

Тут пытался добавить еще один id, но не принимает. Как добавить?

DarinSr

Цитата: mAgency от 14 ноября 2015, 18:25:47
нужно в классе Product.php переделать функцию getNewProducts, добавить передачу в эту функцию ид категории и в классе модуля ислючать из показа товары по ид категории.
public static function getNewProducts($id_lang, $page_number = 0, $nb_products = 10, , $id_category = null, $count = false, $order_by = null, $order_way = null, Context $context = null){

yuazakharov

Сделал так, но не получилось
public static function getNewProducts($id_lang, $page_number = 0, $nb_products = 10, , $id_category = null, $id_category = null, $count = false, $order_by = null, $order_way = null, Context $context = null){

Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'), 18, 30);

PrestaMan

Может класс Product переопределен? Проверьте папку /override/classes/, если в ней есть файл Product.php, то менять функции нужно в нем.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

yuazakharov

Цитата: PrestaMan от 16 ноября 2015, 15:34:07
Может класс Product переопределен? Проверьте папку /override/classes/, если в ней есть файл Product.php, то менять функции нужно в нем.
Не переопределен

yuazakharov

После этой манипуляции, товары из категории=18 тоже стали отображаться

yuazakharov

Решено.
ещё 1 строку
$sql->where('cp.`id_category` <> 999');