Fi1osof 21 апреля 2013 0 0
Хочу показать небольшой пример, который может пригодиться. Вот встала задача — выполнить какие-то действия с документами, которые являются разделами для различных товаров на сайте (массово шаблон обновить и т.п.). Но разделы и товары разбросаны по всему сайту, и логики особой нет. А вручную делать это лень.

Что мы можем сделать в данной ситуации? На мой взгляд самое простое — просто сделать выборку всех родительских документов, которые есть к товаров. Но как это сделать, если товары разбросаны по всему сайту? В 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, то не страшно. Тем более что это разовая операция.
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.