Drupal ajax страницы без перезагрузки

mbaev 14.11.2016, 16:19

Это всего лишь мокап, который я накидал за 20 минут "на коленке" и он требует доработки, но уже сейчас этот js-скрипт позволит простым сайтам работать без перезагрузки страниц.

Для примера, можно сёрфить по нодам в блоге или переходить из редактирования ноды в режим просмотра ноды. В большей степени, продолжают корректно работать ajax-ссылки, созданные, например, с помощью views.

Код

  1. $('a:not(.use-ajax)').click(function () {
  2.   var url = $(this).attr('href');
  3.   if (url && url != '#') {
  4.     $('html').load(url, {}, function (html, status, request) {
  5.       if(status == 'success') {
  6.         window.history.pushState("object or string", "Title", url);
  7.       }
  8.     });
  9.     return false;
  10.   }
  11. });

Проблемы

Сейчас я нашел несколько проблем:

  1. Не работает "Admin menu" при кэшировании на клиенте

    admin-menu

  2. Главная проблема: весь приходящий html записывается в body, что не позволяет использовать метатеги и менять заголовок во вкладке.

То, что работает

  1. Работает загрузка страниц внутри одной темы
  2. Работает Drupal-ajax. В частности, проверял работу ссылок с использованием класса use-ajax.

P.S.

  1. Не стоит рассматривать этот скрипт как продакшн-версию. Но может быть с помощью прохожих и великой силы комментариев мы, таки сможем превратить это в рабочий скрипт.
  2. Существуют другие технологии делающие тоже самое:
    1. Модуль Ajax pages
    2. Пост Simple Drupal AJAX load with jQuery and delivery callback англ.
    3. Модуль RefreshLess (Drupal 8)
    4. Ruby on Rails имеет очень популярный гем Turbolinks , который отлично справляется с этой задачей