Cheizer
@Cheizer

MODX REVO не работает выборка по условиям, как настроить параметр WHERE?

Задача простая но непонятно как реализовать, есть ресурс с id 198, у него есть TV field_news типа MIGX с полем date, пытаюсь отфильтровать записи по условию where, где date (тип простой текст) = 2018. Это все нужно для AJAX фильтра.

Вот логика моего снипета. Упростил все максимально для наглядности. В $_GET['date'] из формы по идее должен передаваться параметр. Но в примере напрямую жестко прописал. Проблема в том, что синтаксис условия where для getImageList сложный, и не могу понять как его прописать. Если миновать массив Filtr и напрямую в WHERE прописать условие $where = '{"date:=":"2018"}'; то все работает. Но нужно через массив, так как параметром фильтрации может быить много, и AJAX нужен формат JSON? в снипете это место вот $where = $modx->toJSON(array($filter));

$filter = array();
if($_GET['date']) {
	//$filter[] = 'date='.$_GET['date'];
	//$filter[] = "{'date:=':'2018'}";
}
if($filter) {
 //$where = $modx->toJSON(array($filter));
 $where = '{"date:=":"2018"}';
}
$params = array(
	'docid' => 198,
	'tvname' => 'field-news',
       'where' => $where
    //'where' => '{"date:=":"2018"}',
	);	
return $modx->runSnippet('getImageList', $params);


Как реализовать выборку что бы условие WHERE работало с JSON и массивом FILTER?
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
Cheizer
@Cheizer Автор вопроса
Решение

<?php
$filter = array();

if($_GET['date']) {
 $filter[] = 'date='.$_GET['date'];
}
if($_GET['mytv']) {
 $filter[] = 'mytv='.$_GET['mytv'];
}
$newArray = [];
if($filter) {
foreach($filter as $key => $value)
  {
 $tmp = explode('=', $value);
	$newArray[$tmp[0] . ':='] = $tmp[1];
    $res = explode("=", $value);
  }
} else {
	$where = '';
}
 $where = json_encode($newArray);

$params = array(
	'docid' => $parents,
	'tvname' => $tvname,
	'tpl' => $tpl,
	'totalVar' => 'totalnews',
	'where' => $where
	);	
	
return $modx->runSnippet('getImageList', $params);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@srjk94
Попробуйте так
$filter = array();
if($_GET['date']) {
  $filter[] = ['date' => $_GET['date']]; //Или так $filter['date'] = $_GET['date'];
}
if($filter) {
 $where = $modx->toJSON($filter);
}
$params = array(
  'docid' => 198,
  'tvname' => 'field-news',
       'where' => $where
  );	
return $modx->runSnippet('getImageList', $params);

Документацию можно глянуть здесь https://docs.modx.com/current/en/extending-modx/xp...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы