Перезагрузите представление с помощью AJAX при событии щелчка


У меня есть представление, отображающее таблицу связанных узлов, которая встроена на странице другого узла. Информация, отображаемая во встроенном представлении, периодически меняется, я хочу разрешить пользователю обновлять представление, нажав ссылку или кнопку "Обновить представление" без перезагрузки всей страницы.

Я проверил модуль views-hacks, который предоставляет функцию автоматической перезагрузки, но это не совсем то, что мне нужно.

Author: Jan Tomka, 2011-08-02

3 answers

Боюсь, здесь вам не обойтись без небольшого кодирования. Первое, что приходит на ум, - это комбинация

  1. Форма API для кнопки обновления,
  2. views_embed_view() для получения текущей версии представления.
  3. АХАХ замена javascript для замены вывода представления и

Модули Автоматическое обновление представлений , упомянутые вами, или Обновление представлений Ajax могут не делать именно то, что вам нужно, но их код может быть источником вдохновения при реализации обновления представлений.

Я также рекомендую взглянуть на код модуля опроса ядра Drupal, в основном функции poll_choice_js (функция обратного вызова для пути poll/js) и форма опроса ($form['choice_wrapper']['poll_more'])

 1
Author: Jan Tomka, 2011-08-03 00:07:54

Вам нужно использовать Drupal.behaviors.

Из-за нехватки времени я не тестировал код, но в основном это логика...

    Drupal.behaviors.myViewsRefresh = {
      attach: function( context , settings) {

        var viewName = 'the-name-of-your-views';

        // Your views should be Ajax enabled,
        // then it will be available as a property of the Drupal object
        // like so...
        var instances = Drupal.views.instances;
        var yourViews;

        // then you simply need to iterate thru the various
        // views instances name to find your views
        $.each( instances , function getInstance( index, element){
              if(element.settings.view_name == viewName ){
                  yourViews = '.view-dom-id-' + element.settings.view_dom_id;
              }
        });

        // Define your button click here...
        $('.yourButtonClass').click( function(){

            if(typeof yourViews !== 'undefined'){
              $(yourViews).trigger('RefreshView'); 
            }

        });            
      }
    }
 1
Author: PatrickS, 2015-04-27 07:44:13

Создайте открытый фильтр. Просмотрите html-код с помощью firebug или аналогичного расширения, затем скопируйте html-код для формы, которая отправляет открытый фильтр. Удалите все параметры выбора, чтобы у вас осталась только кнопка "Отправить", и переименуйте ее во что-то вроде "Обновить представление". Возьмите этот html-код и поместите его в заголовок (убедитесь, что установлен режим полного html). Вуаля, Обновите форму по запросу.

 0
Author: Matt, 2011-08-03 00:19:45