Условие вывода MIGX через getImageList для checkbox
Всем добрый день!
Буду очень благодарен сообществу.
Подскажите каким образом задать условие Where что бы оно работала по наличию ID ресурса в дополнительном поле MIGX
Пример с
Сейчас код выше работает только того когда поле priceserv содержит только одно значение.
priceserv — типа (checkbox) в MIGX отмечены ресурсы и их может быть несколько.
Буду очень благодарен сообществу.
Подскажите каким образом задать условие Where что бы оно работала по наличию ID ресурса в дополнительном поле MIGX
[[getImageList?
&docid=`100`
&tvname=`price_montaj`
&tpl=`price_montaj_tpl`
&where=`{"priceserv:LIKE":"%#92#%"}`
&limit=`999`
]]
Поле priceserv в MIGX может содержать несколько значений. Пример с
Сейчас код выше работает только того когда поле priceserv содержит только одно значение.
priceserv — типа (checkbox) в MIGX отмечены ресурсы и их может быть несколько.
Комментарии: 9
А заменить «LIKE» на «IN» не подходит? Не использую стандартные решения MIGX.
docs.modx.com/current/en/extending-modx/xpdo/class-reference/xpdoquery/xpdoquery.where
docs.modx.com/current/en/extending-modx/xpdo/class-reference/xpdoquery/xpdoquery.where
&where=`{«priceserv:IN»:"%#92#%"}` не работает почему-то(
Ничего не выводит
Ничего не выводит
&where=`{«priceserv:IN»:["#92#"]}`, а так IN принимает массив и не должно быть %
В таком случае выводит только элемент из списка, который содержит только одно значение — 92.

Если такое не работает т=&where=`{«priceserv:IN»:["#92#","#13#"]}, то только &where=`{«priceserv:LIKE»:"%#92#%",«AND:priceserv:LIKE»:"%#13#%"}`
Или AND заменить на OR зависит от случая
Или AND заменить на OR зависит от случая
Мне не очень подходит такое решение. Так как #92#, #13# — это идентификаторы ресурса и я хочу выводить на странице определенные строки из таблицы MIGX значение поля priceserv (типа checkbox) соответствует ID ресурса.
Не понимаю, как получается, что MIGX нет возможности фильтрации по полю Checkbox, если выбрано несколько значений. Или я что-то не понимаю
Решил вопрос не документированным условием contains
&where=`{"priceserv:contains":"[[*id]]"}
Фильтрация происходит здесь:
core/components/migx/model/migx/migx.class.php
core/components/migx/model/migx/migx.class.php
function filterItems($where, $items) {
$tempitems = array();
foreach ($items as $item) {
$include = true;
foreach ($where as $key => $operand) {
$key = explode(':', $key);
$field = $key[0];
$then = $include;
$else = false;
$subject = $item[$field];
$operator = isset($key[1]) ? $key[1] : '=';
$params = isset($key[2]) ? $key[2] : '';
$operator = strtolower($operator);
switch ($operator) {
case '!=':
case 'neq':
case 'not':
case 'isnot':
case 'isnt':
case 'unequal':
case 'notequal':
$output = (($subject != $operand) ? $then : (isset($else) ? $else : ''));
break;
case '<':
case 'lt':
case 'less':
case 'lessthan':
$output = (($subject < $operand) ? $then : (isset($else) ? $else : ''));
break;
case '>':
case 'gt':
case 'greater':
case 'greaterthan':
$output = (($subject > $operand) ? $then : (isset($else) ? $else : ''));
break;
case '<=':
case 'lte':
case 'lessthanequals':
case 'lessthanorequalto':
$output = (($subject <= $operand) ? $then : (isset($else) ? $else : ''));
break;
case '>=':
case 'gte':
case 'greaterthanequals':
case 'greaterthanequalto':
$output = (($subject >= $operand) ? $then : (isset($else) ? $else : ''));
break;
case 'isempty':
case 'empty':
$output = empty($subject) ? $then : (isset($else) ? $else : '');
break;
case '!empty':
case 'notempty':
case 'isnotempty':
$output = !empty($subject) && $subject != '' ? $then : (isset($else) ? $else : '');
break;
case 'isnull':
case 'null':
$output = $subject == null || strtolower($subject) == 'null' ? $then : (isset($else) ? $else : '');
break;
case 'inarray':
case 'in_array':
case 'ia':
case 'in':
$operand = is_array($operand) ? $operand : explode(',', $operand);
$output = in_array($subject, $operand) ? $then : (isset($else) ? $else : '');
break;
case 'find':
case 'find_in_set':
$subject = is_array($subject) ? $subject : explode(',', $subject);
$output = in_array($operand, $subject) ? $then : (isset($else) ? $else : '');
break;
case 'find_pd':
case 'find_in_pipesdelimited_set':
$subject = explode('||', $subject);
$output = in_array($operand, $subject) ? $then : (isset($else) ? $else : '');
break;
case 'contains':
$output = strpos($subject, $operand) !== false ? $then : (isset($else) ? $else : '');
break;
case 'snippet':
$result = $this->modx->runSnippet($params, array('subject' => $subject, 'operand' => $operand));
$output = !empty($result) ? $then : (isset($else) ? $else : '');
break;
case '==':
case '=':
case 'eq':
case 'is':
case 'equal':
case 'equals':
case 'equalto':
default:
$output = (($subject == $operand) ? $then : (isset($else) ? $else : ''));
break;
}
$include = $output ? $output : false;
}
if ($include) {
$tempitems[] = $item;
}
}
return $tempitems;
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.