Come caricare una vista con Ajax in modo da caricare anche i file js / css aggiuntivi necessari per la vista?


8

Attualmente sto usando jQuery per caricare una vista, in questo modo:

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

Il mio problema è che, ad esempio, se la vista utilizza il modulo "Field Slideshow", i file js / css necessari per funzionare correttamente non vengono caricati. Quale potrebbe essere una bella soluzione (= gattini incolume) a questo?


Sembra che questo sarà risolto in D8 drupal.org/node/561858 . Passare il percorso al file js / css in Drupal.settings.mymodule e ottenerli con jQuery.getScript () e jQuery.getCSS () (da github.com/furf/jquery-getCSS ) potrebbe essere una soluzione alternativa ...
Temaruk

Apparentemente l'Ajax Framework carica già i file css / js / library in D7. Devo ancora scavare più a fondo, ma credo che la soluzione potrebbe essere un callback personalizzato del menu Ajax per visualizzazione con consegna della pagina
Ajax

Ho avuto un problema simile , ancora irrisolto, anche se avrei messo un link qui.
silkAdmin,

Non ne so abbastanza per scrivere una risposta completa, ma penso che l' API AJAX di Chaos Tools avrebbe già risolto questo problema. Potresti voler usarlo o provarlo. Anche i campi modificabili risolvono in qualche modo questo problema, quindi potrebbe essere un altro codice di riferimento da verificare.
wizonesolutions,

1
@silkAdmin, ho pubblicato anche una risposta alla tua domanda. Inoltre, va notato che in D7 non è necessario utilizzare ctools. Il framework Ajax è in D7 Core ( api.drupal.org/api/drupal/includes--ajax.inc/group/ajax )
ericduran,

Risposte:


7

Hmm, penso che questa domanda meriti una generosità più grande :-p ma nondimeno ecco il mio tentativo di rispondere a questa domanda.

Drupal carica già qualche extra CSS / js ora non riesco davvero a trovare molta documentazione su di esso e purtroppo i file JS non sono facilmente documentabili senza effettivamente leggere il codice ma c'è.

Dovresti davvero cercare di evitare di fare $ .ajax da solo e invece di avvolgere tutto con Drupal.ajax anche se usi il sistema Ajax, non hai nemmeno bisogno di scrivere tu stesso la richiesta ajax.

Implementando una corretta richiesta di ajax di Drupal usando i comandi di ajax, la maggior parte della gestione di css / js verrà eseguita automaticamente.

Guardando il tuo codice sopra sembra che tu stia facendo le stesse richieste richieste che normalmente farebbe da solo. Quindi dovresti probabilmente lasciare che le viste gestiscano la richiesta Ajax e sovrascrivere i comandi Ajax che verranno attivati ​​come tuo comando. Puoi farlo implementando un hook_ajax_comamnd_alter ma fa un po 'schifo con le viste perché perdi tutte le informazioni contestuali, quindi consiglierei di usare hook_views_ajax_data_alter invece.

So che non c'è molto codice nella mia risposta, ma è difficile rispondere con il codice, dato che il codice attualmente non è corretto.

Per ulteriori informazioni, consultare Drupal.ajax nel file misc / ajax.js. Per un esempio di implementazione di una richiesta Ajax con Drupal.ajax, consultare il file ajax delle viste. E se vuoi vedere ed esempi di viste, il normale comportamento viene sovrascritto cambiando i comandi ajax, vedi il modulo views_load_more dove faccio questo comportamento.

Inoltre, non esitare a commentare questa risposta, se qualcosa qui non è chiaro.

Su e per maggiori informazioni su Ajax Framework vedi Ajax Framework per esempio vedi il modulo di esempio , anche se la maggior parte di ciò che vuoi fare non è coperto nel modulo di esempi.


Deve essere la direzione giusta, ma prima vorrei verificare. Da quando ho posto la domanda ho acquisito esperienza con l'Ajax Framework di Drupal 7, come la creazione e l'utilizzo di comandi Ajax personalizzati. Rivisiterò il mio problema e vedrò cosa si può fare e aggiornerò con le informazioni sui miei risultati! Grazie!
Temaruk,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.