Хочу показать небольшой пример, который может пригодиться. Вот встала задача — выполнить какие-то действия с документами, которые являются разделами для различных товаров на сайте (массово шаблон обновить и т.п.). Но разделы и товары разбросаны по всему сайту, и логики особой нет. А вручную делать это лень.
Что мы можем сделать в данной ситуации? На мой взгляд самое простое — просто сделать выборку всех родительских документов, которые есть к товаров. Но как это сделать, если товары разбросаны по всему сайту? В shopModx все товары имеют данные в связанной таблице, и класс этих данных называется ShopmodxProduct. Соответственно, если мы этот класс жестко включим в условия поиска, то мы обязательно получим именно документы товаров. А далее нам остается только добавить в запрос родительские документы для этих товаров.
<?php $c = $modx->newQuery('modResource'); $c->innerJoin('modResource', 'Children'); $c->innerJoin('ShopmodxProduct', 'Product', 'Children.id=Product.resource_id'); $docs = $modx->getCollection('modResource', $c); foreach($docs as $doc){ // Здесь мы можем делать что хотим с документами разделов print "<br />".$doc->id.") ". $doc->pagetitle; }
Конечно это не самый оптимальный запрос, так как количество записей будет гораздо больше, чем кол-во разделов, но все равно xPDO нам вернет только объекты разделов. Конечно памяти скушает больше чем надо, но если товаров меньше 1000, то не страшно. Тем более что это разовая операция.