Не получается сделать запрос с условием OR для pdoResources

Здравствуйте/
Пытаюсь сделать фильтр из нескольких блоков, в одном из которых есть группа чекбоксов с возможностью множественного выбора. Код сниппета:
<?php
//Filter Fields Settings
$filter = array();

$tags = $_GET['tags'];
if($tags){
    $idx = 0;
    foreach ($tags as $tag){ 
        if($idx == 0){$idx= 1;$comma='';}else{$comma=' OR ';}
         $filter_tags .= $comma."sposob_filtr LIKE '%".$tag."%'";
    }
    $filter[] = $filter_tags;
}

if($_GET['mysum']) {
	$filter[] = 'min_sum_filtr<='.$_GET['mysum'];
	$filter[] = 'max_sum_filtr>='.$_GET['mysum'];
}

//End Settings
	print_r($filter);
//Sort
if($_GET['sortby']) {
	$sortby = $_GET['sortby'];
} else {
	$sortby = 'pagetitle';
}
if($_GET['sortdir']) {
	$sortdir = $_GET['sortdir'];
} else {
	$sortdir = 'asc';
}
//End Sort

//Offset
$offset = 0;
if($_GET['offset']){
	$offset = $_GET['offset'];
}

if($filter) {
	$where = $modx->toJSON(array($filter));
} else {
	$where = '';
}

$params_count = array(
	'parents' => $parents,
	'limit' => 0,
	'tpl' => '@INLINE ,',
	'select' => 'id',
	'includeTVs' => $fields,
	'showHidden' => '1',
	'where' => $where
	);

$count = $modx->runSnippet('pdoResources',$params_count);
$count = count(explode(',',$count))-1;
$modx->setPlaceholder('count',$count);

$params = array(
	'parents' => $parents,
	'limit' => $limit,
	'offset' => $offset,
	'tpl' => $tpl,
	'select' => 'id,pagetitle,introtext,content',
	'includeTVs' => $fields,
	'showHidden' => '1',
	'sortby' => $sortby,
	'sortdir' => $sortdir,
	'where' => $where
	);

$more = $count - $offset - $limit;
$lim = $more > $limit ? $limit : $more;

$button = '';
if($more > 0){
	$button = '<div class="ajax-filter-count" data-count="'.$count.'"><a href="#" class="ajax-more">Загрузить еще '.$lim.' из '.$more.'</a></div>';
}

return $modx->runSnippet('pdoResources',$params).$button;
Проблема в том, что если выбрать несколько чекбоксов и еще другое условие, то это второе условие не срабатывает (насколько я понял, это происходит из-за того, что OR в чекбоксах «перекрывает» новое условие). Переменная $filter, которая потом должна преобразовываться в json строку для where выглядит так:
Array ( [0] => sposob_filtr LIKE '%cash%' OR sposob_filtr LIKE '%visa%' [1] => min_sum_filtr<=100 [2] => max_sum_filtr>=100 )
Логично предположить, что группу условий с OR нужно взять в скобочки, но у меня не получается…
Что делать? (
Игорь
29 января 2020, 16:27
modx.pro
394
0

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

Игорь
30 января 2020, 09:13
0
вот так вот сделал:
if($tags){
    $idx = 0;
    foreach ($tags as $tag){ 
        if($idx == 0){$idx= 1;$comma='( ';}else{$comma=' OR ';}
         $filter_tags .= $comma."sposob_filtr LIKE '%".$tag."%'";
    }
    $filter_tags .= ' )';
    $filter[] = $filter_tags;
}
… вроде работает
    Игорь
    30 января 2020, 10:47
    0
    У меня еще один вопрос возник: Как сделать условие для json, что максимальный параметр суммы может быть не заполнен в TV полях?
    $filter[] = '( max_sum_filtr>='.$_GET['myage'].' OR max_sum_filtr="" )';
    — вот так вот не работает
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2