Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Отображение всех товаров для категорий

10.10.2018, 20:20
Павел
ALTER EGO

Зарегистрирован:
2018-09-28
Сообщений: 4

Всем привет!
Подскажите, можно ли как-нибудь реализоваться следующее:
На сайте есть категория с товаром, где есть подкатегории второго уровня, 3, 4 и так далее:
-Категория:
- Подкатегория 1
- Подподкатегория 11
- Подподкатегория 12
- Подкатегория 2
- Подкатегория 3
Чтобы при клике на "Подкатегория 1" отображался товар из всех дочерних подкатегорий 11 и 12
Аналогично, например, в 11 тоже могут быт подкатегории с товаром - их тоже надо бы отобразить ...
11.10.2018, 06:00
Макуров Константин
Первыйвеб

Зарегистрирован:
2011-08-04
Сообщений: 32

https://netcat.ru/developers/docs/components/system-settings/

$ignore_parent - если 1, игнорирует выборку только родительских объектов (по умолчанию 0)

Ну, а дальше в зависимости от ваших желаний
11.10.2018, 10:31
Павел
ALTER EGO

Зарегистрирован:
2018-09-28
Сообщений: 4

Спасибо, у меня создан компонент Товар1 и он добавлен в каждую категорию, уже пробовал в системных настройках этого компонента указать $ignore_parent = 1;
Но так и не выводит, все равно нужно перейти в конкретную категорию, где товар лежит, чтобы его отобразить ...
Может эту переменную $ignore_parent нужно в запрос добавить ?
11.10.2018, 18:10
Макуров Константин
Первыйвеб

Зарегистрирован:
2011-08-04
Сообщений: 32

Вот код, который нужно вставить в системные настройки. Конечно грубо, но работает. Вот пример на демо: http://18843.store.sitemanager.ru/ раздел одежда.
Админка:
Панель управления: http://18843.store.sitemanager.ru/netcat/admin/
Логин: admin
Пароль: 9clntbb

$sid = $db->get_col("SELECT
child.`Subdivision_ID` AS sid
FROM Subdivision AS sub
LEFT JOIN `Subdivision` as child ON sub.`Subdivision_ID` = child.`Parent_Sub_ID`
LEFT JOIN Catalogue AS catalogue ON catalogue.Catalogue_ID = sub.Catalogue_ID
WHERE (sub.Parent_Sub_ID = {$sub} OR sub.`Subdivision_ID` = {$sub}) AND child.`Subdivision_ID`
GROUP BY child.`Subdivision_ID`
ORDER BY sub.`Priority`");

$s = implode(",", $sid);

if ($s) {
$ignore_sub = $ignore_cc = 1;
$query_where = "a.`Subdivision_ID` IN ({$s})";
}
12.10.2018, 10:34
Павел
ALTER EGO

Зарегистрирован:
2018-09-28
Сообщений: 4

Большое спасибо! Работает, то что надо!
12.10.2018, 23:32
Игорь
Игорь Мишарин
Игорь

Зарегистрирован:
2011-11-20
Сообщений: 443

Можно и короче код применить, используя nc_get_sub_children():
Код:

$ignore_sub=$ignore_cc=1;
$cursubs=join(",",nc_get_sub_children($current_sub['Subdivision_ID']));
$query_where = "a.Subdivision_ID IN ($cursubs)";
30.10.2018, 10:08
Юрий
Студия Вэлпис

Зарегистрирован:
2018-10-30
Сообщений: 18

В реализации решения нужно постараться не забыть критерии доступности к показу товара
К примеру - можно учесть:
Checked=1
Price>0
Есть ли изображение.
Включен ли для показала сам раздел Checked=1 в Subdivision и Инфоблок - Sub_Class Checked=1

И заложить сортировку вывода с дальнейшим функционалом - фильтрации и сортировки.
198 196 2018-10-30 10:08:08 15008
Описание проекта