Выводить товары только из опубликованных категорий
Есть дерево категорий, в категориях товары. Есть неопубликованные категории с товарами. Если перейти в корневую категорию, в ней отображаются все товары из подкатегорий. Как сделать так чтобы товары из неопубликованных подкатегорий не выводились?
Комментарии: 3
Удалось решить проблему? что-то я тоже догнать не могу, какое условие прописать при вызове сниппета
В общем, сделал выборку через сниппет. В &resources указываем список исключаемых id, у которых не опубликован родитель.
Работает. Но буду признателен, если кто-нибудь поможет оптимизировать.
<?php
$sql = $modx->prepare("SELECT
`id`
FROM
`eZRjUq0u0atk_site_content`
WHERE
`class_key` = 'msProduct' AND `parent` IN(
SELECT
`id`
FROM
`eZRjUq0u0atk_site_content`
WHERE
`class_key` = 'msCategory' AND `published` = 0
)");
$sql->execute();
$output = array();
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
$output[] = "-".$row['id'];
}
return implode(', ',$output);
Работает. Но буду признателен, если кто-нибудь поможет оптимизировать.
Помог ваш код, спасибо
чатжпт уже оптимизировал
чатжпт уже оптимизировал
<?php
// Получаем список категорий, которые сняты с публикации
$unpublishedCategories = $modx->getCollection('msCategory', [
'published' => 0
]);
$excludeIds = [];
foreach ($unpublishedCategories as $category) {
// Получаем товары из каждой неподтвержденной категории
$products = $modx->getCollection('msProduct', [
'parent' => $category->get('id')
]);
foreach ($products as $product) {
$excludeIds[] = '-' . $product->get('id');
}
}
// Возвращаем строку для использования в параметре &resources
return implode(',', $excludeIds);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.