特定のコンテンツタイプのノードの追加/編集ページの特定の要素でjQueryコードを実行したいのですが。現在私は置くことによってそれをします
$(document).ready(function() {
if (window.location.href.indexOf("node/add/CONTENT_TYPE") > -1) {
ACTION;
}
});
テーマの.jsファイル内。それは機能しますが、テストはどこでも不必要に実行されるので、アプローチはおそらく適切ではないと思います。
適切な方法を提案していただけませんか?
まず、スクリプトを ビヘイビアー に変換する必要があります。 Drupalは定義済みの動作を呼び出すため、ドキュメントの準備は必要ありません。
次に、drupal_add_jsとhook_form_alterを使用して、このスクリプトを特定のフォームページに追加できます。
$form_id
引数を使用して、ノードフォームであることを確認します。例:
function mymodule_form_alter(&$form, $form_state, $form_id) {
if (preg_match('/node_form/i', $form_id) {
drupal_add_js(drupal_get_path('module', 'my_module') . '/script.js');
}
}
このファイルは、これらのフォームが作成されたときにのみロードされるため、JavaScriptでウィンドウのhrefをチェックしている行を削除することもできます。
上記のコードはテストされていませんが、一般的には正しい方向から始まります。このコードはカスタムモジュールに配置できます。または、管理者が同じテーマを使用している場合は、テーマのtemplate.phpに配置できます。シンプルなカスタムモジュールを強くお勧めします。
編集
フォームIDは6のコンテンツタイプの前にあると思います。したがって、フォームIDを1つのコンテンツタイプに分離するには:
function mymodule_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'content_type_node_form') {
drupal_add_js(drupal_get_path('module', 'my_module') . '/script.js');
}
}
または、 hook_form_FORM_ID_alter を使用して特定のフォームをターゲットにすることもできます。
function mymodule_form_content_type_form_alter(&$form, $form_state, $form_id) {
drupal_add_js(drupal_get_path('module', 'my_module') . '/script.js');
}
どこ content_type
は、特定のコンテンツタイプ(記事、ページなど)の名前です。
動作例(mymodule/script.js):
(function ($) {
// you can define multiple behaviors
Drupal.behaviors.mymodule_behaviorname_one = function(context) {
// this code should fire automatically when the page has loaded
console.log('Hello!');
alert('Hello!');
// attaching to an element
$("a", context).click(function(e) {
e.preventDefault();
alert('You clicked a link.');
}
}
Drupal.behaviors.mymodule_behaviorname_two = function(context) {
// this code should fire automatically when the page has loaded
console.log('Behavior 2');
}
}(jQuery));
DrupalのJSの詳細(ここに6.xの例がいくつかあります): https://www.drupal.org/docs/7/theming/working-with -javascript-and-jquery