jquery - theme - webforms drupal




Comportamenti drupali (4)

  • Quali sono i comportamenti Drupal?
  • Che tipo di livello di servizio offre agli sviluppatori di moduli?
  • Che tipo di relazione si associa a jQuery.ready ?

Alla ricerca di una risposta simile e arrivato qui, ancora senza indizi. Finalmente trovato un po 'più di spiegazione (ed esempi) da un articolo qui: https://benmarshall.me/drupal-behaviors/

Non sono l'autore originale, quindi posso solo citare alcuni testi:

Quali sono i comportamenti Drupal?

In breve, Drupal.behaviors è un modo più modulare e migliore per implementare jQuery.ready. A differenza di jQuery.ready, che viene eseguito una sola volta quando il DOM è pronto per la manipolazione, Drupal.behaviors può essere eseguito più volte durante l'esecuzione della pagina. Ancora meglio, possono essere eseguiti ogni volta che nuovi elementi DOM vengono inseriti nel documento (cioè contenuto gestito da AJAX).

Drupal.behaviors può anche sovrascrivere o addirittura estendere un comportamento esistente. Ad esempio, se un comportamento del modulo aggiunge un effetto di rimbalzo su tutti i collegamenti, un altro modulo potrebbe sostituire tale comportamento con un effetto di rimbalzo diverso.

Un altro vantaggio aggiuntivo di Drupal.behaviors (a partire da Drupal 7) è la possibilità di utilizzare drupal_add_js (PHP) o Drupal.settings.modulename (JS) e passare le impostazioni come secondo parametro (il primo è il contesto) al comportamento .


Drupal ha un sistema di 'comportamenti' per fornire un modo modulare e migliore per collegare funzionalità JavaScript per posizionare elementi in una pagina. Drupal Behaviors ti consente di ignorare o estendere il comportamento esistente. Questi comportamenti Drupal sono programmi attivati ​​da eventi che vengono collegati agli elementi della pagina da modificare. Mentre i comportamenti possono essere collegati a contenuti specifici, sono anche collegati più comportamenti e possono essere resi più stupefacenti per un rapido remake.

JavaScript allegando la logica a Drupal.behaviors. Ecco un esempio tratto da quella pagina:

Drupal.behaviors.exampleModule = {
  attach: function (context, settings) {
    $('.example', context).click(function () {
      $(this).next('ul').toggle('show');
    });
  }
}

;


Insieme alle risposte sopra menzionate sulle cose chiave, puoi passare i dati da php a javascript che è il seguente

Passaggio di valori da PHP a Javascript con "Drupal.settings"

Puoi facilmente rendere variabili variabili da PHP a Javascript sul front-end con Drupal.settings usando la funzione drupal_add_js ()

<?php
  drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');
?>

o

<?php
$element['#attached']['js'][] = array(
  'type' => 'setting',
  'data' => array('myModule' => array('key' => 'value')),
);
?>

Questo sarà disponibile in Javascript come:

  if (Drupal.settings.myModule.key === 'value') {
    alert('Got it!');
  }

Versione lunga : Drupal.behaviors non è semplicemente una sostituzione di jQuery.ready poiché quest'ultimo viene eseguito una volta sola (quando DOM è pronto per la manipolazione): i comportamenti possono essere attivati ​​più volte durante l'esecuzione della pagina e possono essere eseguiti ogni volta che nuovi elementi DOM vengono inseriti in il documento.

Inoltre, i moduli possono sovrascrivere o estendere un comportamento esistente (ad esempio se un modulo ha un comportamento di aggiunta di un effetto di rimbalzo su tutti i collegamenti, un secondo modulo potrebbe sostituire il comportamento con un effetto di rimbalzo diverso).

Versione breve : è più modulare, sebbene la documentazione possa essere migliorata.

Inoltre, a partire da Drupal 7, le impostazioni definite utilizzando drupal_add_js (PHP) o Drupal.settings.modulename (Javascript) vengono passate direttamente come secondo parametro (il primo è il contesto) al comportamento.

Per esempio:

Drupal.behaviors.changeLinks = function(context, settings){
    if (!settings) settings = Drupal.settings.changeLinks;
    $("a", context).hover(function() {
        $(this).css('color', settings.color);
    });
};

E se uno dei tuoi script (o un altro) crea nuovi nodi, potrebbe ancora avere i comportamenti applicati ai nuovi nodi senza dover sapere quali sono gli altri moduli installati:

var newNodes = $('<a href="#">Hello</a> <a href="#">World</a>').appendTo('#someDiv');

Drupal.attachBehaviors(newNodes);






drupal-6