Выводить товары только из опубликованных категорий

Есть дерево категорий, в категориях товары. Есть неопубликованные категории с товарами. Если перейти в корневую категорию, в ней отображаются все товары из подкатегорий. Как сделать так чтобы товары из неопубликованных подкатегорий не выводились?
Владислав
01 октября 2015, 13:07
modx.pro
1 016
0

Комментарии: 3

Александр
04 апреля 2018, 15:48
0
Удалось решить проблему? что-то я тоже догнать не могу, какое условие прописать при вызове сниппета
    Александр
    05 апреля 2018, 08:19
    0
    В общем, сделал выборку через сниппет. В &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);

    Работает. Но буду признателен, если кто-нибудь поможет оптимизировать.
      des1gner
      06 января 2025, 11:49
      0
      Помог ваш код, спасибо
      чатжпт уже оптимизировал
      <?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);
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3