Как обновить мой View в Drupal 8, не прокручивая его вверх? - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь обновить свой View в Drupal 8, не перезагружая страницу с этим кодом:

(function ($, Drupal) {

  'use strict';

  setInterval(function() {
    $('.view-message-activity-stream-timeline-public').trigger('RefreshView');
  }, 10000);

})(jQuery, Drupal);

Это работает.

Моя проблема:

Каждый раз, когда обновляется представление, эта страница возвращается к верху представления.

Существует другая проблема с обновлением страницы.Когда я нажимаю ссылку «Afficher plus» внизу домашней страницы, под страницей 1 появляется страница 2, но она автоматически закрывается при обновлении страницы.

https://www.s1biose.com/

1 Ответ

0 голосов
/ 08 июля 2019

Ваша проблема вызвана ViewAjaxController добавлением ScrollTopCommand к ответу ajax каждый раз, когда он загружает / перезагружает представление.Вы можете найти соответствующие строки в методе ajaxView:

if (isset($pager_element)) {
  $response->addCommand(new ScrollTopCommand(".js-view-dom-id-$dom_id"));
  $view->displayHandlers->get($display_id)->setOption('pager_element', $pager_element);
}

Надеемся, что можно изменить данные команды, отправленные клиенту, с помощью hook_ajax_render_alter,просто удалите команду viewsScrollTop, чтобы она больше не запускалась:

function <MODULE>_ajax_render_alter(array &$data) {
  $view_name = '<view_name>';
  $view_dom_id = '<view_dom_id>';
  $selector = '.js-view-dom-id-' . $view_dom_id;

  foreach ($data as $key => $value) {
    if ($value['command'] === 'viewsScrollTop' && $value['selector'] === $selector) {
      unset ($data[$key]);
      break;
    }
  }
}

Если вам нужно сопоставить view_dom_id с view_name, вы можете найти команду settings в$ data array, например.$cmd['settings']['views']['ajaxViews'] имеет структуру, которая выглядит следующим образом, обратите внимание, что ключ массива точно создается из views_dom_id:

[ajaxViews] => Array
    (
        [views_dom_id:<views_dom_id>] => Array
            (
                [view_name] => <view_name>
                [view_display_id] => <view_display_id>
                [view_dom_id] => <views_dom_id>
            )

    )
...