Автор Тема: Хочу слегка модифицировать blocknewproducts  (Прочитано 732 раз)

14 Ноябрь 2015, 18:10:04
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый вечер! Народ, помогите пожалуйста исключить показ товаров из определенной категории в 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'}
Все равно их видно.
14 Ноябрь 2015, 18:25:47
Ответ #1
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-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 ?
Решение всех Ваших вопросов в создании Интернет-магазина.
14 Ноябрь 2015, 18:43:06
Ответ #2
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
в запрос sql
WHERE ...
($id_category ? ' AND c.`id_category`<>'.(int)$id_category : '').
Благодарю за быстрый отклик!
Все сделал как вы написали.  В sql-е вроде ничего не изменили.
Все равно товары категории видны
15 Ноябрь 2015, 12:10:26
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Продукт может принадлежать множеству категорий. Можно не показывать товары для категории по умолчанию (основной), для этого в шаблоне /themes/default-bootstrap/product-list.tpl добавить,
{foreach from=$products item=product name=products}
    {if $product->id_category_default != 'id категории'}
но тогда не будут показанны товары для этой категории на всем сайте во всех модулях.
15 Ноябрь 2015, 12:39:19
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
$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.
Лучшие цены!!!
15 Ноябрь 2015, 14:31:07
Ответ #5
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нужно еще и таблицу категорий включить в запрос, тогда можно будет в запросе не учитывать по переданному ид категорий
$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.
Вот теперь не показывает. Благодарю!
16 Ноябрь 2015, 13:29:03
Ответ #6
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Product::getNewProducts((int) $this->context->language->id, 0, (int)Configuration::get('NEW_PRODUCTS_NBR'), 18);

Тут пытался добавить еще один id, но не принимает. Как добавить?
16 Ноябрь 2015, 14:58:02
Ответ #7
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
нужно в классе 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){
16 Ноябрь 2015, 15:29:19
Ответ #8
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Сделал так, но не получилось
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);
16 Ноябрь 2015, 15:34:07
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Может класс Product переопределен? Проверьте папку /override/classes/, если в ней есть файл Product.php, то менять функции нужно в нем.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
16 Ноябрь 2015, 15:40:15
Ответ #10
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Может класс Product переопределен? Проверьте папку /override/classes/, если в ней есть файл Product.php, то менять функции нужно в нем.
Не переопределен
16 Ноябрь 2015, 15:41:34
Ответ #11
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
После этой манипуляции, товары из категории=18 тоже стали отображаться
16 Ноябрь 2015, 16:04:36
Ответ #12
  • Пользователь
  • **
  • Сообщений: 65
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Решено.
ещё 1 строку
$sql->where('cp.`id_category` <> 999');