Вывод тегов ресурсов, ограниченных определенным TV

Есть большое количество ресурсов. У ресурсов есть 2 TV (type и category)
type (продам, куплю)
category (пылесос, магнитофон, чайник, компьютер)
Необходимо вывести отдельно список категорий товаров с типом «куплю» и отдельно «продам»Пытался добавить эту функцию в сниппет tagLister, так как он выводит еще и количество товаров каждой категории, но так и не понял, как ограничить выдачу.
Выводить планировал используя вызов:
[[!tagLister? 
&andTv=`type` (хотел добавить)
&andTvValue=`продам` (хотел добавить)
&tv=`category` 
&target=`27`
&tpl=`tagListerTpl`
&allTpl=`tagListerAllTpl`
]]
В сниппете копал сюда:
(64 строка сниппета)
/* get TV values */
$c = $modx->newQuery('modTemplateVarResource');
$c->innerJoin('modTemplateVar','TemplateVar');
$c->innerJoin('modResource','Resource');
$c->leftJoin('modUser','CreatedBy','CreatedBy.id = Resource.createdby');
$c->leftJoin('modUser','PublishedBy','PublishedBy.id = Resource.publishedby');
$c->leftJoin('modUser','EditedBy','EditedBy.id = Resource.editedby');
$tvPk = (int)$tv;
if (!empty($tvPk)) {
    $c->where(array('TemplateVar.id' => $tvPk));
} else {
    $c->where(array('TemplateVar.name' => $tv));
}
Но так и не разобрался.
Kosatchev
28 февраля 2019, 22:00
modx.pro
761
0

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

Максим
01 марта 2019, 09:44
0
Посмотрите тут. Правда логика работы немного отличается: daruse.ru/poluchenie-resursov-po-tv-znacheniyu-v-xpdo-modx-revo но принцип должен быть понятен.
    Kosatchev
    03 марта 2019, 23:38
    0
    Модифицировал указанный сниппет, но он не сортирует по двум TV
    <?php
    $where = $modx->newQuery('modResource');
    $where->leftJoin('modTemplateVarResource', 'TemplateVarResources');
    $where->leftJoin('modTemplateVar', 'tv', "tv.id=TemplateVarResources.tmplvarid");
    $where->where(array(
        array(
            'tv.name'   => 'type', // Имя TV1
            'TemplateVarResources.value'    => 'продам',// Значение TV1
        )
    ));
    $where->where(array(
        array(
            'tv.name'   => 'category', // Имя TV2
            'TemplateVarResources.value'    => 'магнитофон',// Значение TV2
        )
    ));
    $resources = $modx->getCollection('modResource',$where);
    foreach ($resources as $id => $res) {
      $output .= '
    ['.$id.'] => '.$res->get('pagetitle').'
    ';
    }
    return $output;
    Так же, пробовал составить where-запрос иначе:
    $where->where(array(
        array(
            'tv.name:='   => 'type', // Имя TV1
            'TemplateVarResources.value:='    => 'продам',// Значение TV1
            'AND:tv.name:='   => 'category', // Имя TV2
            'TemplateVarResources.value:='    => 'магнитофон',// Значение TV2
        )
    ));
    Тоже не дает ожидаемого результата.
      Максим
      04 марта 2019, 12:19
      0
      Так проблема с выборкой или сортировкой? Я вам скинул пример выборки. Вы пишете, что не сортирует. При этом в коде нет даже упоминания о сортировке.
        Kosatchev
        05 марта 2019, 13:53
        0
        C выборкой, я неверно выразился. нужно выбрать по двум TV одновременно
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4