web-dev-qa-db-ja.com

Drupal動作

  • Drupal動作とは何ですか?
  • モジュール開発者に提供するサービスレイヤーのタイプは何ですか?
  • jQuery.readyにマップする関係のタイプは何ですか?
56
Shoaib Nawaz

ロングバージョン:Drupal.behaviorsはjQuery.readyの単なる代替ではありません。jQuery.readyは1回しか実行されないためです(DOMの操作準備が整ったとき)。ページの実行中に複数回起動され、新しいDOM要素がドキュメントに挿入されるたびに実行できます。

また、モジュールは既存の動作をオーバーライドまたは拡張できます(たとえば、1つのモジュールがすべてのリンクにバウンス効果を追加する動作を持っている場合、2番目のモジュールは動作を別のバウンス効果に置き換えることができます)。

ショートバージョン:よりモジュール化されていますが、ドキュメントは改善される可能性があります。


また、Drupal 7、drupal_add_js(PHP)またはDrupal.settings.modulename(Javascript)を使用して定義された設定が直接渡されます動作の2番目のパラメーター(最初のパラメーターがコンテキスト)として。

例えば:

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

また、スクリプトの1つ(または別の)が新しいノードを作成する場合、他のどのモジュールがインストールされているかを知らなくても、新しいノードに動作を適用できます。

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

Drupal.attachBehaviors(newNodes);
80
wildpeaks

重複した機能

Drupal.behaviorsアーキテクチャは、jQueryに既にある機能を複製することに注意してください。

また、この記事の執筆時点では、Drupal.behaviorsのドキュメントやケーススタディはないようですoutside Drupal自体;そして、Drupal(上記のように)内のドキュメントは、大幅に改善の恩恵を受ける可能性があります。有料でのみアクセスできます。

これは、パフォーマンスの低下、異常、および予期しない結果がDrupal.behaviorsエコシステム固有の標準jQueryと一致しないことに気付く可能性があることを意味します。

ネイティブjQuery機能

Drupal.behaviorsとは対照的に、標準jQuery APIの組み込み機能は詳細に文書化されていますインラインデモおよび例。さらに、jsfiddleなどのサイトで無料で入手できる多数の実例があります。

「参照」セクションのリンクは、ドキュメントに挿入された新しいDOM要素の処理に関連するjQuery API呼び出しを列挙しています。

こちらもご覧ください

7
dreftymac

重要なことについての上記の回答とともに、次のようなデータをphpからjavascriptに渡すことができます

PHPから「Drupal.settings」を使用してJavascriptに値を渡す

drupal_add_js()関数を使用して、Drupal.settingsを使用してフロントエンドのJavascriptで変数を簡単にPHP

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

または

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

これは、Javascriptで次のように利用できます。

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

同様の答えを探して、ここに着きましたが、まだ手がかりがありません。最後に、ここの記事からもう少し説明(および例)を見つけました: https://benmarshall.me/drupal-behaviors/

私は元の著者ではないため、引用できるのは一部のテキストのみです。

Drupal Behaviors?

要するに、Drupal.behaviorsは、jQuery.readyを実装するためのよりモジュール化されたより良い方法です。 DOMを操作する準備ができたときに一度だけ実行されるjQuery.readyとは異なり、Drupal.behaviorsはページの実行中に複数回実行できます。さらに良いことに、新しいDOM要素がドキュメントに挿入されるたびに実行できます(つまり、AJAX駆動型コンテンツ)。

Drupal.behaviorsは、既存の動作をオーバーライドまたは拡張することもできます。そのため、たとえば、モジュールの動作がすべてのリンクにバウンス効果を追加する場合、別のモジュールがその動作を別のバウンス効果に置き換えることができます。

Drupal.behaviorsのもう1つの追加ボーナス(Drupal 7)以降)は、drupal_add_js(PHP)またはDrupal.settings.modulename(JS)を使用し、2番目のパラメーターとして設定を渡す機能です(最初はコンテキストです)動作に。

3
th.sigit

Drupalビヘイビアは、ページのロード時およびAJAXリクエスト(ドキュメント/ htmlに追加されたいくつかの新しい要素)の後にJavaScriptを実行する必要がある場合に使用されます。

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

yourmodulename:これは名前空間であり、一意でなければなりません。たとえば、これは通常、モジュールの名前ですが、必須ではありません。

コンテキスト:これは実際には本当にクールです。ページのロード時にコンテキストにドキュメント全体が含まれ、AJAXリクエストの後に新しくロードされたすべての要素が含まれます。経由でAJAX他とは異なります。

settings:これには、PHP経由でJavaScriptに渡される情報が含まれます。これは、Drupal.settings経由でJavaScriptにアクセスすることに似ています。

1
khurrami

Drupalには、JavaScript機能をページに配置するためのモジュール式でより優れた方法を提供する「動作」システムがあります。 Drupal Behaviorsは、既存の動作をオーバーライドまたは拡張できます。これらのDrupal=動作は、変更されるページ要素にアタッチされるイベントトリガープログラムです。特定のコンテンツに添付することができ、複数のビヘイビアーも添付され、素早くリメイクするために複数回燃えることができます。

Drupal.behaviorsにロジックを添付するJavaScript。そのページから取られた例はここにあります:

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

;

1