Comment charger une vue avec ajax pour que les fichiers js / css supplémentaires nécessaires à la vue soient également chargés?

8

Actuellement, j'utilise jQuery pour charger une vue, comme ceci:

$.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!');
    }
  });

Mon problème est que, par exemple, si la vue utilise le module «Field Slideshow», les fichiers js / css nécessaires à son bon fonctionnement ne sont pas chargés. Quelle pourrait être une bonne solution (= chatons indemnes) à cela?

Temaruk
la source
Il semble que cela sera résolu dans D8 drupal.org/node/561858 . Passer le chemin vers le fichier js / css dans Drupal.settings.mymodule et les obtenir avec jQuery.getScript () et jQuery.getCSS () (de github.com/furf/jquery-getCSS ) pourrait être une solution de contournement ...
Temaruk
Apparemment, le framework Ajax déjà paresseux charge les fichiers css / js / bibliothèque dans D7. Je dois encore approfondir, mais je pense que la solution pourrait être un rappel de menu ajax personnalisé par vue avec la livraison de pages ajax ...
Temaruk
J'ai eu un problème similaire , toujours non résolu, même si je mettrais un lien vers celui-ci ici.
silkAdmin
Je ne sais pas assez pour écrire une réponse complète, mais je pense que l' API AJAX de Chaos Tools aurait déjà résolu ce problème. Vous voudrez peut-être l'utiliser ou le vérifier. Les champs modifiables traitent également ce problème d'une manière ou d'une autre, il peut donc être un code de référence supplémentaire à vérifier.
wizonesolutions
1
@silkAdmin, j'ai également posté une réponse à votre question. Il convient également de noter qu'en D7, vous n'avez pas vraiment besoin d'utiliser ctools. Le framework Ajax est dans D7 Core ( api.drupal.org/api/drupal/includes--ajax.inc/group/ajax )
ericduran

Réponses:

7

Hmm, j'ai l'impression que cette question mérite une plus grande prime :-p mais néanmoins voici ma tentative de répondre à cela.

Drupal charge déjà tous les css / js supplémentaires maintenant je ne peux pas vraiment trouver beaucoup de documentation dessus et malheureusement les fichiers JS ne sont pas facilement documentés sans avoir réellement lu le code mais sont là.

Vous devriez vraiment essayer d'éviter de faire vous-même une demande $ .ajax et de tout emballer avec Drupal.ajax également si vous utilisez le système Ajax, vous n'avez même pas besoin d'écrire la demande ajax vous-même.

En implémentant une requête ajax Drupal appropriée en utilisant les commandes ajax, la plupart des manipulations css / js seront effectuées automatiquement pour vous.

En regardant votre code ci-dessus, il semble que vous fassiez la même demande que les vues le feraient normalement. Vous devriez donc probablement laisser les vues gérer la requête ajax et écraser les commandes ajax qui vont être déclenchées pour être votre commande. Vous pouvez le faire en implémentant un hook_ajax_comamnd_alter mais il aspire un peu avec les vues car vous perdez toutes les informations contextuelles, donc je recommanderais plutôt d'utiliser hook_views_ajax_data_alter.

Je sais qu'il n'y a pas beaucoup de code dans ma réponse, mais il est difficile de répondre avec du code, étant donné que le code actuellement n'est pas correct d'être avec.

Pour plus d'informations, voir Drupal.ajax dans le fichier misc / ajax.js. Pour un exemple d'implémentation d'une requête ajax avec Drupal.ajax voir le fichier vues ajax. Et si vous voulez voir et un exemple de comportement normal de vues écrasé en changeant les commandes ajax voir le module views_load_more où je fais ce comportement.

N'hésitez pas non plus à commenter cette réponse, si quelque chose n'est pas clair.

Sur et pour plus d'informations sur Ajax Framework, voir Ajax Framework, par exemple, voir l' exemple de module, même si la plupart de ce que vous voulez faire n'est pas couvert par le module d'exemples.

ericduran
la source
Ce doit être la bonne direction, mais je voudrais d'abord vérifier. Depuis que j'ai posé la question, j'ai acquis une certaine expérience avec le framework Ajax de Drupal 7, comme la création et l'utilisation de commandes ajax personnalisées. Je vais revoir mon problème et voir ce qui peut être fait, et mettre à jour avec des informations sur mes conclusions! Merci!
Temaruk
l'url que vous référez
shekoufeh