Drupal → Однократное выполнение ajax запроса

24.05.2019

Часто возникает необходимость, чтобы ajax ссылка с классом use-ajax выполнила запрос ровно один раз, после чего прекратила реакцию на клики (например это ссылка загрузки контента в таб). Реализовать задуманное можно с помощью небольшого костыля подменяющего Drupal.Ajax.prototype.eventResponse:

(function ($, Drupal) {
  /**
   * Override AJAX eventResponse function.
   */
  var originalAjaxEventResponse = Drupal.Ajax.prototype.eventResponse;

  Drupal.Ajax.prototype.eventResponse = function (element, event) {
    var $element = $(element);

    if ($element.hasClass('use-ajax-once')) {
      if ($element.data('ajax-done')) {
        this.ajaxing = true;
      }
      else {
        $element.data('ajax-done', true);
      }
    }

    originalAjaxEventResponse.apply(this, arguments);
  };
})(jQuery, Drupal);

Использование — подключить js файл на страницу, добавить ссылке помимо класса use-ajax класс use-ajax-once.

P.S: запрос на добавления подобного функционала в ядро лежит с 2010 года :)

Написанное актуально для
Drupal 8+
Похожие записи

Добавить комментарий