@thisuser

Как через pdoResources выбрать из двух категорий?

Замучился составлять условия выборки.

Требуется выбрать все ресурсы из родителя + ещё одной категории, значением tv-параметра детей которой будет id текущего ресурса ) На примере должно стать понятней:

{'!mFilter2' | snippet : [
    'parents' => '[[*id]], 100', // родителем будет текущий ресурс и ещё ресурс с id = 100
    'suggestions' => 0,
    'limit' => 10,
    'includeTVs' => 'price, spec', // интересует spec
    'tplPageWrapper' => '@INLINE <div class="mypagination"><ul>[[+pages]]</ul></div>', 
    
    'sortby' => [[*tv_sort]],
]}


По умолчанию, значением tv параметра spec является 0. В ресурсах с родителем (id=100) значение этого параметра является какой либо из [[*id]].

То есть например, на странице с id = 500 мне надо выбрать всех детей (spec==0) а также добавить из ресурса с id=100 всех детей, значение spec у которых будет 500 )

Пробовал многое. Например 'tvFilters' => 'spec==[[*id]]||spec==0', ни к чему не привело. Также, пробовал: 'where' => '{"spec":0, "OR:spec":[[*id]]}' - тоже мимо. Не подскажите как подобное условие реализовать? Благодарю.
  • Вопрос задан
  • 251 просмотр
Решения вопроса 1
@thisuser Автор вопроса
Вроде бы поборол задачку.
Долгое и упорное гугление подсказало, что без leftJoin будет не обойтись. В итоге родился такой код:

{'!mFilter2' | snippet : [
    'parents' => '[[*id]], 100', // Из текущего + 100
    'suggestions' => 0,
    'limit' => 10,
    'includeTVs' => 'price, spec',
    'tplPageWrapper' => '@INLINE <div class="pagination p10"><ul>[[+pages]]</ul></div>',
    
    'leftJoin' => '{
    	"spec": {
    	    "class":"modTemplateVarResource"
    	    ,"alias":"spec"
    		,"on": "modResource.id = spec.contentid AND spec.tmplvarid = 62"
    	}
    }',
    // Либо spec не указан (что сделано в дочерних ресурсах текущего), либо spec = id текужего ресурса (а может и нескольких)
    'where' => '["(`spec`.`value` IS NULL OR `spec`.`value` IN ([[*id]]))"]' 
]}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы