Wie lade ich eine Ansicht mit Ajax, damit auch zusätzliche JS / CSS-Dateien geladen werden, die von der Ansicht benötigt werden?

8

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?

Temaruk
quelle
Es scheint, dass dies in D8 drupal.org/node/561858 gelöst wird . Das Übergeben des Pfads zur js / css-Datei in Drupal.settings.mymodule und das Abrufen mit jQuery.getScript () und jQuery.getCSS () (von github.com/furf/jquery-getCSS ) könnte eine
Problemumgehung sein
Anscheinend lädt das Ajax Framework bereits faul CSS / JS / Bibliotheksdateien in D7. Ich muss noch tiefer gehen, aber ich denke, die Lösung könnte ein benutzerdefinierter Ajax-Menü-Rückruf pro Ansicht mit Ajax-Seitenlieferung sein ...
Temaruk
Ich hatte ein ähnliches Problem , das immer noch ungelöst war, obwohl ich hier einen Link dazu setzen würde.
SeideAdmin
Ich weiß nicht genug, um eine vollständige Antwort zu schreiben, aber ich denke , die AJAX-API von Chaos Tools hätte dieses Problem bereits gelöst. Vielleicht möchten Sie es verwenden oder ausprobieren. Editable Fields behandelt dieses Problem ebenfalls irgendwie, sodass möglicherweise ein weiterer Referenzcode überprüft werden muss.
Zauberlösungen
1
@silkAdmin, ich habe auch eine Antwort auf deine Frage gepostet. Es sollte auch beachtet werden, dass Sie in D7 ctools nicht wirklich verwenden müssen. Das Ajax-Framework befindet sich in D7 Core ( api.drupal.org/api/drupal/includes--ajax.inc/group/ajax )
Ericduran

Antworten:

7

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.

Ericduran
quelle
Das muss die richtige Richtung sein, aber ich möchte zuerst überprüfen. Seit ich die Frage gestellt habe, habe ich einige Erfahrungen mit dem Ajax Framework von Drupal 7 gesammelt, z. B. das Erstellen und Verwenden von benutzerdefinierten Ajax-Befehlen. Ich werde mein Problem erneut untersuchen und sehen, was getan werden kann, und mit Informationen zu meinen Ergebnissen aktualisieren! Vielen Dank!
Temaruk
Die URL, auf die Sie verweisen, ist nicht vorhanden: api.drupal.org/api/drupal/includes--ajax.inc/group/ajax
shekoufeh