Для того чтобы сделать фильтр категорий в mFilter2 или mSearch2 и исключить папки с товарами, в которых расположены вариации товаров, вам понадобится некоторая кастомизация кода.
Для начала, необходимо понять, каким образом вариации товаров организованы в вашей системе. В модели данных MODX Evolution стандартным способом является создание отдельных вариаций товаров как отдельных веб-страниц, каждая из которых является дочерней страницей основного товара.
Один из подходов, который вы можете использовать, - это использование событий MODX для обработки событий на создание или изменение страницы товара и проверки, содержит ли эта страница подстраницы с вариациями товара. Если у товара есть вариации, вы можете пометить его специальной системной свойством (например, "hasVariations") для дальнейшей фильтрации.
Для этого вам потребуется создать два события: одно для обработки создания страницы товара (OnDocFormSave), другое для изменения (OnDocFormSaveAfter). Внутри обработчика события вы можете проверить, есть ли у текущей страницы дочерние элементы, которые являются вариациями товаров. Если есть, установите значение системного свойства "hasVariations" текущей страницы на true, иначе - на false.
Пример кода для обработчика события может выглядеть примерно так:
<?php /** * Event handler for OnDocFormSave and OnDocFormSaveAfter events */ if ($modx->event->name == 'OnDocFormSave' || $modx->event->name == 'OnDocFormSaveAfter') { $parentId = $resource->get('parent'); // Получаем ID родительской страницы товара $hasVariations = $modx->getCount('modResource', array('parent' => $parentId)); // Проверяем, есть ли дочерние страницы товаров $resource->set('hasVariations', $hasVariations ? 1 : 0); // Устанавливаем значение системного свойства "hasVariations" $resource->save(); // Сохраняем изменения }
Затем вы можете использовать это системное свойство "hasVariations" в mFilter2 (mSearch2) для фильтрации категорий. В файле конфигурации mFilter2 (mSearch2) (например, assets/snippets/msearch2/configs/default.config.inc.php
) найдите раздел "CATEGORY FILTER" и добавьте следующий фрагмент кода:
'prepareCategories' => function($parentId) { $condition = array( 'parent' => $parentId, 'template' => array( /* insert your template IDs for product pages here */ ), 'hasVariations' => 0, // Только страницы товаров без вариаций ); return $condition; },
Убедитесь, что вам нужно заменить /* insert your template IDs for product pages here */
на фактические шаблоны страниц товаров в вашей системе.
После этого фильтр категорий в mFilter2 (mSearch2) будет исключать папки с товарами, которые имеют вариации.