В настоящее время я использую 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, необходимые для его правильной работы, не загружаются. Что может быть хорошим решением (= невредимых котят) для этого?
7
views
ajax
javascript
Temaruk
источник
источник
Ответы:
Хм, я чувствую, что этот вопрос заслуживает большей щедрости: -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, например, см. Пример модуля, даже при том, что большая часть того, что вы хотите сделать, не описана в модуле примеров.
источник