it-swarm.com.de

Drupal Verhalten

  • Was sind Drupal Verhaltensweisen überhaupt?
  • Welche Art von Service-Layer bietet es Modulentwicklern?
  • Welche Art von Beziehung wird jQuery.ready Zugeordnet?
56
Shoaib Nawaz

Lange Version : Drupal.behaviors ist nicht einfach ein Ersatz für jQuery.ready, da letzteres nur einmal ausgeführt wird (wenn DOM zur Manipulation bereit ist): behaviors can Wird während der Seitenausführung mehrmals ausgelöst und kann ausgeführt werden, wenn neue DOM-Elemente in das Dokument eingefügt werden.

Außerdem können Module ein vorhandenes Verhalten überschreiben oder erweitern (z. B. kann ein zweites Modul das Verhalten durch einen anderen Bounce-Effekt ersetzen, wenn ein Modul einen Bounce-Effekt für alle Links hinzufügt).

Kurzversion : Es ist modularer, obwohl die Dokumentation verbessert werden könnte.


Ab Drupal 7 werden Einstellungen, die mit drupal_add_js (PHP) oder mit Drupal.settings.modulename (Javascript) definiert wurden, direkt übergeben als zweiter Parameter (der erste ist der Kontext) zum Verhalten.

Beispielsweise:

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

Und wenn eines Ihrer Skripte (oder ein anderes) neue Knoten erstellt, können die Verhalten auf die neuen Knoten angewendet werden, ohne dass Sie wissen müssen, welche anderen Module installiert sind:

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

Drupal.attachBehaviors(newNodes);
80
wildpeaks

Doppelte Funktionalität

Beachten Sie, dass die Architektur von Drupal.behaviors die Funktionalität bereits in jQuery dupliziert.

Zum jetzigen Zeitpunkt scheint es keine Dokumentation oder Fallstudien für Drupal.behaviors außerhalb des Unternehmens zu geben von Drupal selbst ; und der Dokumentation in Drupal (wie oben angegeben)) könnten erhebliche Vorteile aus Verbesserungen ziehen schriftlich scheint es so zu sein, dass die primäre detaillierte Dokumentation nur kostenpflichtig ist.

Dies bedeutet, dass Sie möglicherweise Leistungseinbußen, Anomalien und unerwartete Ergebnisse feststellen, die nicht mit der Standard-jQuery übereinstimmen, die für das Drupal.behaviors-Ökosystem endemisch ist.

Native jQuery-Funktionalität

Im Gegensatz zu Drupal.behaviors ist die integrierte Funktionalität der Standard-jQuery-API ausführlich dokumentiert , einschließlich Zeilendemonstrationen und Beispiele . Darüber hinaus sind zahlreiche Live-Beispiele auf Websites wie jsfiddle frei verfügbar.

Die Links im Abschnitt see also listen die jQuery-API-Aufrufe auf, die für die Behandlung neuer in das Dokument eingefügter DOM-Elemente relevant sind.

Siehe auch

7
dreftymac

Zusammen mit den oben genannten Antworten auf die wichtigsten Fragen können Sie Daten von PHP an Javascript übergeben. Dies ist wie folgt

Übergabe von Werten von PHP an Javascript mit "Drupal.settings"

Mit der Funktion drupal_add_js () können Sie Variablen aus PHP am Frontend mit Drupal.settings für Javascript verfügbar machen

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

oder

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

Dies wird in Javascript verfügbar sein als:

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

Auf der Suche nach einer ähnlichen Antwort und hier angekommen, immer noch ohne Anhaltspunkte. Endlich ein wenig mehr Erklärung (und Beispiele) aus einem Artikel hier: https://benmarshall.me/drupal-behaviors/

Ich bin nicht der ursprüngliche Autor, daher kann ich nur einige Texte zitieren:

Was sind Drupal Verhaltensweisen?

Kurz gesagt, Drupal.behaviors ist eine modularere und bessere Möglichkeit, jQuery.ready zu implementieren. Im Gegensatz zu jQuery.ready, das nur einmal ausgeführt wird, wenn das DOM manipulationsbereit ist, kann Drupal.behaviors während der Seitenausführung mehrmals ausgeführt werden. Sie können sogar ausgeführt werden, wenn neue DOM-Elemente in das Dokument eingefügt werden (d. H. AJAX Driven Content)).

Drupal.behaviors kann auch ein vorhandenes Verhalten überschreiben oder sogar erweitern. Wenn ein Modulverhalten beispielsweise einen Bounce-Effekt für alle Links hinzufügt, kann ein anderes Modul dieses Verhalten durch einen anderen Bounce-Effekt ersetzen.

Ein weiterer zusätzlicher Bonus von Drupal.behaviors (beginnend mit Drupal 7)) ist die Möglichkeit, drupal_add_js (PHP) oder Drupal.settings.modulename (JS) als zweiten Parameter zu verwenden und Einstellungen zu übergeben ( das erste ist der Kontext) zum Verhalten.

3
th.sigit

Drupal-Verhalten wird verwendet, wenn Ihr JavaScript beim Laden der Seite und nach einer AJAX Anfrage (einige neue Elemente in Ihrem Dokument/HTML hinzugefügt) ausgeführt werden muss.

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

yourmodulename: Dies ist Ihr Namespace und sollte eindeutig sein. Dies ist beispielsweise in der Regel der Name Ihres Moduls, der jedoch nicht vorgeschrieben ist.

context: Das ist wirklich cool, beim Laden einer Seite enthält der Kontext das gesamte Dokument und nach einer AJAX Anfrage werden alle neu geladenen Elemente angezeigt. Auf diese Weise können Sie Inhalte behandeln, die geladen werden in via AJAX anders als andere.

settings: Enthält Informationen, die über PHP an JavaScript weitergeleitet werden, und ähnelt dem Zugriff über Drupal.settings.

1
khurrami

Drupal verfügt über ein Verhaltenssystem, mit dem Sie die JavaScript-Funktionalität modular und besser anfügen können, um Elemente auf einer Seite zu platzieren. Drupal Behaviours ermöglicht es Ihnen, das vorhandene Verhalten zu überschreiben oder zu erweitern. Diese Drupal Behaviours sind ereignisgesteuerte Programme, die an die zu ändernden Seitenelemente angehängt werden. Während Behaviours kann an bestimmte Inhalte angehängt werden, mehrere Verhaltensweisen sind ebenfalls angehängt und können für ein schnelles Remake mehrmals angezündet werden.

JavaScript durch Anhängen von Logik an Drupal.behaviors. Hier ist ein Beispiel von dieser Seite:

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

;

1