it-swarm.it

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

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 soluzione piacevole (= gattini illesi) a questo?

8
Temaruk

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 Drupal richiesta Ajax utilizzando i comandi Ajax la maggior parte della gestione 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 ad esempio vedi il modulo esempio , anche se la maggior parte di ciò che vuoi fare non è coperto nel modulo degli esempi.

7
ericduran