Derzeit verwende ich jQuery, um eine Ansicht wie folgt zu laden:
$.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!');
}
});
Mein Problem ist, dass zum Beispiel, wenn die Ansicht das Modul 'Feld-Diashow' verwendet, die js / css-Dateien, die für die ordnungsgemäße Funktion erforderlich sind, nicht geladen werden. Was könnte eine schöne (= unversehrte) Lösung für dieses Problem sein?
7
views
ajax
javascript
Temaruk
quelle
quelle
Antworten:
Hmm, ich denke, diese Frage verdient eine größere Prämie :-p aber trotzdem ist hier mein Versuch, dies zu beantworten.
Drupal lädt bereits zusätzliche CSS / JS, jetzt kann ich nicht wirklich viel Dokumentation finden und leider sind die JS-Dateien nicht einfach zu dokumentieren, ohne den Code tatsächlich durchzulesen, aber sie sind da.
Sie sollten wirklich vermeiden, $ .ajax-Anfragen selbst zu stellen und stattdessen alles mit Drupal.ajax zu verpacken. Auch wenn Sie das Ajax-System verwenden, müssen Sie die Ajax-Anfrage nicht einmal selbst schreiben.
Durch die Implementierung einer ordnungsgemäßen Drupal-Ajax-Anforderung mithilfe von Ajax-Befehlen wird der größte Teil der CSS / JS-Verarbeitung automatisch für Sie erledigt.
Wenn Sie sich den obigen Code ansehen, sieht es so aus, als würden Sie die gleichen Anforderungsansichten erstellen, die Sie normalerweise selbst ausführen würden. Daher sollten Sie wahrscheinlich zulassen, dass Ansichten die Ajax-Anforderung verarbeiten, und die Ajax-Befehle, die ausgelöst werden, als Ihren Befehl überschreiben. Sie können dies tun, indem Sie entweder einen hook_ajax_comamnd_alter implementieren, aber es nervt mit Ansichten, weil Sie alle Kontextinformationen verlieren, daher würde ich empfehlen, stattdessen hook_views_ajax_data_alter zu verwenden.
Ich weiß, dass meine Antwort nicht viel Code enthält, aber es ist schwierig, mit Code zu antworten, da der derzeit vorhandene Code nicht korrekt ist.
Weitere Informationen finden Sie unter Drupal.ajax in der Datei misc / ajax.js. Ein Beispiel für die Implementierung einer Ajax-Anforderung mit Drupal.ajax finden Sie in der Ansicht Ajax-Datei. Wenn Sie ein Beispiel für das normale Verhalten von Ansichten sehen möchten, das durch Ändern der Ajax-Befehle überschrieben wird, lesen Sie das Modul views_load_more, in dem ich dieses Verhalten ausführe.
Sie können diese Antwort auch gerne kommentieren, wenn hier etwas unklar ist.
Ein und für weitere Informationen zum Ajax Framework siehe Ajax Framework, siehe beispielsweise das Beispielmodul , obwohl das meiste, was Sie tun möchten, nicht im Beispielmodul behandelt wird.
quelle