Вопрос 1. Чтобы получить и вывести не перечень самих товаров, а перечень категорий товаров — какой параметр нужно использовать?
Проще всего конечно использовать сниппет [[Wayfinder?level=`1`]] или getdata-процессор {processor action=«web/resources/getdata» ns=«modxsite» params=[«parent» => $modx->resource->id]}…
Но так вы получите категории без учета есть в них товары для вывода или нет. Хотя это и не страшно, если каталог не большой и вручную легко рулится (нет товаров — поставили категории галочку «Не показывать в меню» и все).
Но если нужна автоматизация (то есть чтобы точно не выводились категории, для которых товары отсутствуют), то надо уже более серьезно к этому подходить. В идеале — расширять web/catalog/products/getdata процессор (но тут есть сложности, так как там он товары будет пытаться получить, а надо родителей выводить, то есть хитро запросы переопределить), или хотя бы расширить web/resources/getdata и в запросе добавить дочерние товары, типа так:
public function prepareQueryBeforeCount(xPDOQuery $c) { $c = parent::prepareQueryBeforeCount($c); $alias = $c->getAlias(); $c->innerJoin('modResource', 'Children'); $c->innerJoin('ShopmodxProduct', 'Product', "Product.resource_id = Children.id"); $c->where(array( "Children.published" => 1, "Children.deleted" => 0, // hidemenu and etc optionaly )); return $c; }
Но это будет выводить только категории ближайшего уровня и только при условии наличия товаров непосредственно в них, без товаров на вложенных уровнях. Если надо учитывать вложенные уровни, можете этот процессор переопределить и дописать.