Не получается сделать запрос с условием 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 нужно взять в скобочки, но у меня не получается…Что делать? (
Комментарии: 2
вот так вот сделал:
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;
}
… вроде работает
У меня еще один вопрос возник: Как сделать условие для json, что максимальный параметр суммы может быть не заполнен в TV полях?
$filter[] = '( max_sum_filtr>='.$_GET['myage'].' OR max_sum_filtr="" )';
— вот так вот не работает
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.