Вывод тегов ресурсов, ограниченных определенным TV
Есть большое количество ресурсов. У ресурсов есть 2 TV (type и category)
type (продам, куплю)
category (пылесос, магнитофон, чайник, компьютер)
Необходимо вывести отдельно список категорий товаров с типом «куплю» и отдельно «продам»Пытался добавить эту функцию в сниппет tagLister, так как он выводит еще и количество товаров каждой категории, но так и не понял, как ограничить выдачу.
Выводить планировал используя вызов:
(64 строка сниппета)
type (продам, куплю)
category (пылесос, магнитофон, чайник, компьютер)
Необходимо вывести отдельно список категорий товаров с типом «куплю» и отдельно «продам»
Выводить планировал используя вызов:
[[!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));
}
Но так и не разобрался.Комментарии: 4
Посмотрите тут. Правда логика работы немного отличается: daruse.ru/poluchenie-resursov-po-tv-znacheniyu-v-xpdo-modx-revo но принцип должен быть понятен.
Модифицировал указанный сниппет, но он не сортирует по двум 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
)
));
Тоже не дает ожидаемого результата.
Так проблема с выборкой или сортировкой? Я вам скинул пример выборки. Вы пишете, что не сортирует. При этом в коде нет даже упоминания о сортировке.
C выборкой, я неверно выразился. нужно выбрать по двум TV одновременно
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.