web-dev-qa-db-ja.com

ノードの追加/編集ページにのみjQueryコードを追加するにはどうすればよいですか?

特定のコンテンツタイプのノードの追加/編集ページの特定の要素でjQueryコードを実行したいのですが。現在私は置くことによってそれをします

$(document).ready(function() {
    if (window.location.href.indexOf("node/add/CONTENT_TYPE") > -1) {
        ACTION;
    }
});

テーマの.jsファイル内。それは機能しますが、テストはどこでも不必要に実行されるので、アプローチはおそらく適切ではないと思います。

適切な方法を提案していただけませんか?

1
Taiki

まず、スクリプトを ビヘイビアー に変換する必要があります。 Drupalは定義済みの動作を呼び出すため、ドキュメントの準備は必要ありません。

次に、drupal_add_jsとhook_form_alterを使用して、このスクリプトを特定のフォームページに追加できます。

  1. se hook_form_alter ノード追加およびノー​​ド編集フォームにフックします。 $form_id引数を使用して、ノードフォームであることを確認します。
  2. drupal_add_jsを使用 スクリプトファイルを追加します。

例:

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

1
Kevin