7

drupal サイトで jQuery $(document).ready() を実行したいと思います。インデックスページに貼り付けることができることはわかっていますが、これは本当に面倒でハックです。

私が知りたいのは、これを配置する正しい場所はどこかということです。すべてのテーマで使用したくないので、テーマ固有にする必要もあります。

助けてくれてありがとう。


甘い成功、助けてくれてありがとう、この質問に最後の修正が1つだけあります。ここまで来たので、jQuery コードを実行してドキュメントを更新する必要があります。コンテキストを使用してドキュメントを変更できますか?

4

2 に答える 2

7

Drupal のスペシャリストではありませんが、このブログ エントリ$(document).ready()は、Drupal 6 の時点で、jQuery コードに関数を含める必要がまったくないことを示唆しています。

代わりに、 のプロパティとして割り当てる関数内にすべてのコードを配置できますDrupal.behaviors

Drupal インストールのmisc/ directoryには、jquery.js ファイルだけでなく、drupal.js (および特定のページまたは管理機能 (upload.js など) に固有の機能を制御する他のいくつかの js ファイル) もあります。 Drupal での jQuery の使用。

他の js ファイルからアクセスして使用する必要があるプロパティを含める目的で、Drupal JavaScript オブジェクトを宣言します。たとえば、Drupal.settings プロパティは、モジュール設定の配列をそのモジュールの js コードに渡すために使用されます。これを行うには、php コードで drupal_add_js() を呼び出し、2 番目のパラメーターが「設定」として渡されていることを確認します。次に例を示します。

drupal_add_js(array('mymodule' => $array_of_settings), 'setting'); 

js ファイルでは、Drupal.settings.mymodule でこれらの設定にアクセスできます。このようにして、Drupal.settings オブジェクトを mymodule プロパティで拡張しました。これは、それ自体がすべての設定を含むオブジェクトです。

Drupal オブジェクトのもう 1 つのプロパティは、動作オブジェクト、つまりDrupal.behaviorsです。モジュールに新しい jQuery 動作を追加する場合は、このオブジェクトを拡張するだけです。モジュールの jQuery コード全体は、次のように構成できます。

Drupal.behaviors.myModuleBehavior = function (context) 
{
    //do some fancy stuff
};

しかし、関数を宣言するだけで、どのように呼び出されるのでしょうか? まあ、それはすべて drupal.js で処理されます。$(document).ready関数を呼び出す関数があり、その関数は、そのプロパティのすべてを呼び出すオブジェクトをDrupal.attachBehaviors順番に循環しDrupal.behaviorsます。これらはすべて、上記のようにさまざまなモジュールによって宣言された関数であり、ドキュメントを context として渡します。

このようにする理由は、jQuery コードが新しい DOM 要素をページに追加する AJAX 呼び出しを行う場合、その新しいコンテンツに動作 (たとえば、すべての h3 要素を非表示にするなど) を次のように関連付けたい場合があるためです。良い。しかし、DOM が読み込まれてDrupal.attachBehaviors実行されたときには存在しなかったため、動作は関連付けられていません。ただし、上記の設定では、 を呼び出すだけで済みますDrupal.behaviors.myModuleBehavior(newcontext)。ここnewcontextで、新しい AJAX 配信のコンテンツを呼び出します。これにより、ビヘイビアーがドキュメント全体に何度も関連付けられないようにすることができます。このコードの使用方法の完全な例については、こちらを参照してください

于 2008-12-15T08:02:05.737 に答える
2

VonC は質問の「どのように」の部分に適切に答えたので、「どこで」の部分に焦点を当てます。

スクリプトがテーマ固有の場合、スクリプト ファイルを配置する自然な場所はテーマ内です。問題は、Drupal がテーマに到達するまでに、$scripts変数が (Drupal の用語で) HTML に「レンダリング」されていることです。テーマ レイヤーにスクリプトを追加するには、スクリプトを追加して$scripts変数を再構築する必要があります。

Drupal 6 を使用していると仮定すると、これはtheme_preprocess_page()関数に含まれます。

drupal_add_js(drupal_get_path('theme', 'theme_name') .'/example.js', 'theme');
$variables['scripts'] = drupal_get_js();

drupal_get_path()テーマの名前を反映するようにの 2 番目の引数を変更し、スクリプト ファイルの名前をスクリプトに付けた名前に変更しexample.jsます。

于 2008-12-15T08:34:16.623 に答える