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

Михаил
Михаил
1,5K
1
Содержание:
  1. Комментарии
Здравствуйте. Интересует такой вопрос. Например, я вывожу отзывы через getImageList из MIGX. Заголовок, текст + новые | старые (это поле по которому хочу фильтровать).

Предположим на сайте есть две ссылки — новые | старые

При нажатии на новые выходят только новые отзывы (где было добавлено в таблице migx значение — новые), а при нажатии на старые выходят только старые (где было добавлено в таблице migx значение — старые).

Это просто пример. Надеюсь понятно.

Очень жду ответа. Спасибо!

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

  1. Александр Мальцев
    22 июня 2017, 12:47
    Например, можно сделать так:
    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>
    
    Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.