Как загрузить представление с помощью ajax, чтобы также загружались дополнительные файлы js / css, необходимые для представления?

8

В настоящее время я использую jQuery для загрузки вида, например так:

$.ajax({
    type: 'POST',
    url: Drupal.settings.basePath + 'views/ajax',
    dataType: 'json',
    data: 'view_name=' + viewName + '&view_display_id=default&view_args=' + viewArgument, // Pass a key/value pair.
    success: function(data) {
      var viewHtml = data[1].data;
      target.children().fadeOut(300, function() {
        target.html(viewHtml);

        var newHeightOfTarget = target.children().height();

        target.children().hide();

        target.animate({
          height: newHeightOfTarget
        }, 150);

        target.children().delay(150).fadeIn(300);

        Drupal.attachBehaviors(target);
      });
    },
    error: function(data) {
      target.html('An error occured!');
    }
  });

Моя проблема в том, что, например, если представление использует модуль 'Field Slideshow', файлы js / css, необходимые для его правильной работы, не загружаются. Что может быть хорошим решением (= невредимых котят) для этого?

Temaruk
источник
Похоже, что это будет решено в D8 drupal.org/node/561858 . Передача пути к файлу js / css в Drupal.settings.mymodule и получение их с помощью jQuery.getScript () и jQuery.getCSS () (из github.com/furf/jquery-getCSS ) могут быть
временным решением
Очевидно, Ajax Framework уже загружает файлы css / js / library в D7. Все еще нужно углубиться, но я чувствую, что решением может быть пользовательский обратный вызов меню ajax для каждого просмотра с доставкой страницы ajax ...
Temaruk
У меня была похожая проблема , все еще не решенная, хотя я бы поставил здесь ссылку.
silkAdmin
Я не знаю достаточно, чтобы написать полный ответ, но я думаю, что AJAX API Chaos Tools уже решил бы эту проблему. Вы можете использовать это или проверить это. Редактируемые поля также как-то решают эту проблему, так что это может быть еще один справочный код для проверки.
wizonesolutions
1
@silkAdmin, я тоже отправил ответ на твой вопрос. Также следует отметить, что в D7 вам не нужно использовать ctools. Платформа Ajax находится в ядре D7 ( api.drupal.org/api/drupal/includes--ajax.inc/group/ajax )
ericduran,

Ответы:

7

Хм, я чувствую, что этот вопрос заслуживает большей щедрости: -p, но тем не менее вот моя попытка ответить на этот вопрос.

Drupal уже загружает любые дополнительные css / js, теперь я не могу найти много документации по нему, и, к сожалению, файлы JS не так легко документировать без фактического чтения кода, но они есть.

Вы действительно должны стараться избегать запроса $ .ajax самостоятельно и вместо этого оборачивать все в Drupal.ajax, также если вы используете систему Ajax, вам даже не нужно писать запрос ajax самостоятельно.

При реализации правильного запроса ajax в Drupal с использованием команд ajax большая часть обработки css / js будет выполнена автоматически.

Если вы посмотрите на приведенный выше код, то увидите, что вы делаете те же самые запросы, которые обычно делают сами. Таким образом, вы, вероятно, должны позволить представлениям обрабатывать запрос ajax и перезаписывать команды ajax, которые будут выполняться как ваша команда. Вы можете сделать это, либо внедрив hook_ajax_comamnd_alter, но это своего рода отстой с представлениями, потому что вы теряете всю контекстную информацию, поэтому я бы рекомендовал вместо этого использовать hook_views_ajax_data_alter.

Я знаю, что в моем ответе не так много кода, но трудно ответить с помощью кода, так как в настоящее время код не соответствует действительности.

Для получения дополнительной информации см. Drupal.ajax в файле misc / ajax.js. Для примера реализации ajax-запроса с Drupal.ajax см. Ajax-файл views. И если вы хотите увидеть и пример нормального поведения представлений, перезаписываемых изменением команд ajax, посмотрите модуль views_load_more, где я делаю это поведение.

Также, пожалуйста, не стесняйтесь комментировать этот ответ, если что-то здесь неясно.

Более подробная информация об Ajax Framework приведена в разделе Ajax Framework, например, см. Пример модуля, даже при том, что большая часть того, что вы хотите сделать, не описана в модуле примеров.

ericduran
источник
Это должно быть правильное направление, но я бы сначала хотел проверить. Задав вопрос, я приобрел некоторый опыт работы с Ajax Framework в Drupal 7, например, создавая и используя собственные команды ajax. Я вернусь к своей проблеме и посмотрю, что можно сделать, и обновлю информацию о моих выводах! Спасибо!
Темарук
URL, на который вы ссылаетесь,
shekoufeh