Comportements Drupal

  • Quels sont les comportements de Drupal?
  • Quel type de couche de service offre-t-il aux développeurs de modules?
  • Quel type de relation il jQuery.ready à jQuery.ready ?

Version longue : Drupal.behaviors n’est pas simplement un remplacement de jQuery.ready car ce dernier ne s’exécute qu’une seule fois (lorsque DOM est prêt à être manipulé): les comportements peuvent être déclenchés plusieurs fois lors de l’exécution de la page et le document.

De plus, les modules pourraient remplacer ou étendre un comportement existant (par exemple, si un module a un comportement d’ajout d’un effet de rebond sur toutes les liaisons, un second module pourrait remplacer le comportement par un effet de rebond différent).

Version courte : plus modulaire, la documentation pourrait être améliorée.


De même, à partir de Drupal 7, les parameters définis à l’aide de drupal_add_js (PHP) ou de Drupal.settings.modulename (Javascript) sont directement transmis en tant que second paramètre (le premier étant le contexte) du comportement.

Par exemple:

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

Et si l’un de vos scripts (ou un autre) crée de nouveaux noeuds, il se peut que les comportements soient appliqués aux nouveaux noeuds sans avoir à savoir quels autres modules sont installés:

 var newNodes = $('Hello World').appendTo('#someDiv'); Drupal.attachBehaviors(newNodes); 

Fonctionnalité dupliquée

Notez que l’architecture Drupal.behaviors duplique les fonctionnalités déjà présentes dans jQuery.

En outre, à ce jour, il ne semble pas y avoir de documentation ou d’étude de cas pour Drupal.behaviors en dehors de Drupal lui-même ; et la documentation de Drupal (comme indiqué ci-dessus) pourrait considérablement bénéficier d’améliorations. Au moment d’écrire ces lignes, il semble que la documentation détaillée primaire soit à access restreint à titre payant uniquement.

Cela signifie que vous remarquerez peut-être une dégradation des performances, des anomalies et des résultats inattendus incompatibles avec la norme jQuery endémique à l’écosystème Drupal.be.

Fonctionnalité jQuery native

Contrairement à Drupal.behaviors, les fonctionnalités intégrées de l’API jQuery standard sont largement documentées, notamment des démonstrations et des exemples en ligne . De plus, de nombreux exemples en direct sont disponibles gratuitement sur des sites tels que jsfiddle.

Les liens de la section see also énumèrent les appels api jQuery pertinents pour gérer les nouveaux éléments DOM insérés dans le document.

Voir également

Outre les réponses mentionnées ci-dessus, vous pouvez transmettre des données de php à javascript, comme suit:

Passer des valeurs de PHP à Javascript avec “Drupal.settings”

Vous pouvez facilement rendre les variables de PHP disponibles en Javascript sur le frontal avec Drupal.settings en utilisant la fonction drupal_add_js ()

  array('key' => 'value')), 'setting'); ?> 

ou

  'setting', 'data' => array('myModule' => array('key' => 'value')), ); ?> 

Ce sera disponible en Javascript comme:

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

Vous cherchez une réponse similaire et êtes arrivé ici, toujours sans indices. Enfin trouvé un peu plus d’explications (et d’exemples) à partir d’un article ici: https://benmarshall.me/drupal-behaviors/

Je ne suis pas l’auteur original, je ne peux donc citer que quelques textes:

Quels sont les comportements Drupal?

En résumé, Drupal.behaviors est un moyen plus modulaire et plus efficace pour implémenter jQuery.ready. Contrairement à jQuery.ready qui ne s’exécute qu’une fois lorsque le DOM est prêt à être manipulé, Drupal.behaviors peut être exécuté plusieurs fois pendant l’exécution de la page. Encore mieux, ils peuvent être exécutés à chaque fois que de nouveaux éléments DOM sont insérés dans le document (c.-à-d. Un contenu piloté par AJAX).

Drupal.behaviors peut également remplacer ou même étendre un comportement existant. Ainsi, par exemple, si un comportement de module ajoute un effet de rebond à tous les liens, un autre module pourrait remplacer ce comportement par un effet de rebond différent.

Un autre avantage de Drupal.behaviors (à partir de Drupal 7) est la possibilité d’utiliser les parameters drupal_add_js (PHP) ou Drupal.settings.modulename (JS) et de les transmettre en tant que second paramètre (le premier étant le contexte). .

Drupal a un système de «comportement» pour fournir une manière modulaire et meilleure d’attacher des fonctionnalités JavaScript pour placer des éléments sur une page. Les comportements Drupal vous permettent de remplacer ou d’étendre le comportement existant. Ces comportements Drupal sont des programmes déclenchés par des événements qui sont associés aux éléments de la page à modifier. Bien que les comportements puissent être associés à des contenus spécifiques, plusieurs comportements sont également associés et peuvent être résolus plusieurs fois pour un remake rapide.

JavaScript en attachant une logique à Drupal.behaviors. Voici un exemple tiré de cette page:

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

;

Les comportements Drupal sont utilisés si votre JavaScript doit être exécuté lors du chargement de la page et après une requête AJAX (certains nouveaux éléments ajoutés dans votre document / html).

 Drupal.behaviors.yourmodulename = { attach: function (context, settings) { // Code to be run on page load, and // on ajax load added here } }; 

yourmodulename: Ceci est votre espace de nom et doit être unique. Par exemple, il s’agit généralement du nom de votre module, mais ce n’est pas obligatoire.

context: C’est vraiment très cool, sur le chargement de la page le contexte contiendra l’intégralité du document et après une requête AJAX aura tous les éléments nouvellement chargés. De cette façon, vous pouvez traiter le contenu qui est chargé via AJAX différemment des autres.

settings: Il contient des informations transmises à JavaScript via PHP, il est similaire à l’access via Drupal.settings.