Ajax фильтрация MIGX

Здравствуйте. Интересует такой вопрос. Например, я вывожу отзывы через getImageList из MIGX. Заголовок, текст + новые | старые (это поле по которому хочу фильтровать). Предположим на сайте есть две ссылки — новые | старые При нажатии на новые выходят только новые отзывы (где было добавлено в таблице migx значение — новые), а при нажатии на старые выходят только старые (где было добавлено в таблице migx значение — старые). Это просто пример. Надеюсь понятно. Очень жду ответа. Спасибо!

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

Александр Мальцев
Александр Мальцев
Например, можно сделать так:
1. Создать необходимый MIGX элемент (например, reviews).
На вкладке FormTabs:
Caption — reviews.
Fileds:
  • FieldName — title, Caption — Заголовок;
  • FieldName — text, Caption — Текст отзыва;
  • FieldName — type, Caption — Тип, Input TV type — listbox, Input Option Values — Новые||Старые, Default Value — Новые;
На вкладке Columns:
  • Header — Заголовок, Field — title;
  • Header — Текст отзыва, Field — text;
  • Header — Тип, Field — type;
2. Создать TV-переменную (например, reviews). Тип ввода: migx, конфигурации: reviews.
3. Создать ресурс, который будет обрабатывать AJAX запросы (например, pagetitle — AJAX, Шаблон — (пустой шаблон), содержимое шаблона — вызов сниппета [[!Ajax]]).
4. Создать сниппет Ajax.
<?php
// Если  запрос не AJAX (XMLHttpRequest), то завершить работу
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}

if (empty($_POST['action'])) {exit();}

$result = '';

switch ($_POST['action']) {
  case 'getOldReviews':
    $docid = $_POST['docid'];
    // код для получения старых отзывов (getImageList)
    $scriptProperties = array(
      'docid'=>$docid,
      'tvname'=>'reviews',
      'tpl'=>'@CODE: <h2>[[+title]]</h2><p>[[+text]]</p>',
      'where'=>'{"type:=":"Старые"}'
    );
    $result = $modx->runSnippet('getImageList',$scriptProperties);
    break;
    
  case 'getNewReviews':
    $docid = $_POST['docid'];
    // код для получения старых отзывов (getImageList)
    $scriptProperties = array(
      'docid'=>$docid,
      'tvname'=>'reviews',
      'tpl'=>'@CODE: <h2>[[+title]]</h2><p>[[+text]]</p>',
      'where'=>'{"type:=":"Новые"}'
    );
    $result = $modx->runSnippet('getImageList',$scriptProperties);
    break;
}

exit($result);
5. Поместить на страницу, на который вы хотите выводить отзывы следующий код:
<a href="#" id="oldReviews" data-id="[[*id]]" data-reviews="getOldReviews">Старые отзывы</a>
<a href="#" id="newReviews" data-id="[[*id]]" data-reviews="getNewReviews">Новые отзывы</a>
<div id="reviews"></div>
<script>
$(function(){
  // получить старые комменатарии (ссылка с id=oldRevies)
  $('#oldReviews, #newReviews').click(function(e){
    e.preventDefault();
    idResource = $(this).attr('data-id');
    typeReviews = $(this).attr('data-reviews');
    $.post('ajax', {docid: idResource, action: typeReviews}, function(data) {
      if (data.length > 0) {
        // поместить блок с id="reviews" данные ajax запроса (старые комментарии)
        $('#reviews').html(data);
      }
    });  
  });
  
});  
</script>