web-dev-qa-db-fra.com

Drupal comportements

  • Quels sont les comportements Drupal)?
  • Quel type de couche de service offre-t-il aux développeurs de modules?
  • À quel type de relation correspond-il jQuery.ready?
56
Shoaib Nawaz

Version longue : Drupal.behaviors n'est pas simplement un remplacement pour jQuery.ready puisque ce dernier ne s'exécute qu'une seule fois (lorsque DOM est prêt pour la manipulation): les comportements peuvent être déclenché plusieurs fois pendant l'exécution de la page et peut être exécuté chaque fois que de nouveaux éléments DOM sont insérés dans le document.

De plus, les modules peuvent 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 deuxième module pourrait remplacer le comportement par un effet de rebond différent).

Version courte : c'est plus modulaire, bien que la documentation puisse être améliorée.


De plus, à partir de Drupal 7, les paramètres définis à l'aide de drupal_add_js (PHP) ou de Drupal.settings.modulename (Javascript) sont directement transmis comme deuxième 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 nœuds, il pourrait toujours avoir les comportements appliqués aux nouveaux nœuds sans avoir à savoir quels autres modules sont installés:

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

Drupal.attachBehaviors(newNodes);
80
wildpeaks

Fonctionnalité dupliquée

Notez que l'architecture Drupal.behaviors duplique la fonctionnalité déjà dans jQuery.

De plus, à ce jour, il ne semble pas y avoir de documentation ou d'études de cas pour Drupal.behaviors en dehors de Drupal lui-même ; et la documentation dans Drupal (comme indiqué ci-dessus) pourrait bénéficier considérablement d'améliorations. À partir de ce par écrit, il semble que la documentation détaillée principale soit à accès restreint et payante seulement.

Cela signifie que vous pouvez remarquer une dégradation des performances, des anomalies et des résultats inattendus non cohérents avec jQuery standard qui sont endémiques à l'écosystème Drupal.behaviors.

Fonctionnalité jQuery native

Contrairement aux comportements de Drupal.be, la fonctionnalité intégrée de l'API jQuery standard est largement documentée incluant dans démonstrations en ligne et exemples . De plus, il existe de nombreux exemples en direct disponibles gratuitement sur des sites tels que jsfiddle.

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

Voir aussi

7
dreftymac

Avec les réponses mentionnées ci-dessus sur les éléments clés, 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 pour Javascript sur le frontend avec Drupal.settings en utilisant la fonction drupal_add_js ()

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

ou

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

Ce sera disponible en Javascript comme:

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

Vous cherchez une réponse similaire et est 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 bref, Drupal.behaviors est un moyen plus modulaire et meilleur d'implémenter jQuery.ready. Contrairement à jQuery.ready qui ne s'exécute qu'une seule 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'est-à-dire AJAX contenu piloté).

Les comportements Drupal.be peuvent également remplacer ou même étendre un comportement existant. Ainsi, par exemple, si un comportement de module ajoute un effet de rebond sur tous les liens, un autre module pourrait remplacer ce comportement par un effet de rebond différent.

Un autre avantage supplémentaire des comportements Drupal.be (à partir de Drupal 7), est la possibilité d'utiliser drupal_add_js (PHP) ou Drupal.settings.modulename (JS) et de passer les paramètres comme deuxième paramètre ( le premier étant le contexte) au comportement.

3
th.sigit

Les comportements Drupal sont utilisés si votre JavaScript doit être exécuté au chargement de la page et après une demande AJAX (quelques 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 noms 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 vraiment cool, au chargement de la page, le contexte contiendra le document entier et après une demande AJAX aura tous les éléments nouvellement chargés. De cette façon, vous pouvez traiter le contenu qui est chargé via via AJAX différemment des autres.

paramètres: cela contient des informations transmises à JavaScript via PHP, c'est similaire à y accéder via Drupal.settings.

1
khurrami

Drupal a un système de "comportements" pour fournir un moyen modulaire et meilleur d'attacher la fonctionnalité JavaScript pour placer des éléments sur une page. Drupal Behaviors vous permet de remplacer ou d'étendre le comportement existant. Ces comportements Drupal sont des programmes déclenchés par des événements qui sont attachés aux éléments de page à modifier. Bien que les comportements peut être attaché à un contenu spécifique, plusieurs comportements sont également attachés et peuvent être effacés plusieurs fois pour un remake rapide.

JavaScript en attachant une logique aux comportements Drupal.be. Voici un exemple tiré de cette page:

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

;

1
Pappu Kumar Singh