質問: javascriptファイルを管理ページに追加する モジュールを使用して、すべての管理ページにjavascript/cssファイルを追加するにはどうすればよいですか?
回答: モジュールを使用すると、次の2つの方法を実行できます。 実装 hook_init() 実装 hook_form_alter() 最初の方法では、追加のjavascript(またはcss)ファイルを任意の管理ページに追加できますが、2番目の方法では、これらのファイルをフォームを含むページにのみ追加できます。function mymodule_init() { if (arg(0) == 'admin') { $path = drupal_get_path('module', 'mymodule'); drupal_add_js($path . '/mymodule.js'); drupal_add_css($path . '/mymodule.css'); } } function mymodule_form_alter(&$form, &$form_state, $form_id) { if (arg(0) == 'admin') { $path = drupal_get_path('module', 'mymodule'); $form['#attached']['css'][] = $path . '/mymodule.css'; $form['#attached']['js'][] = $path . '/mymodule.js'; } } 「mymodule」をモジュールの短い名前に置き換えます。 「mymodule.js」と「mymodule.css」を、javascriptファイルとcssファイルの実際の名前に置き換えます。 system_init() には、特定のファイルを管理ページに追加するための次のコードが含まれています。 $path = drupal_get_path('module', 'system'); // add the css for this module. these aren't in system.info, because they // need to be in the css_system group rather than the css_default group. drupal_add_css($path . '/system.base.css', array('group' => css_system, 'every_page' => true)); // add the system.admin.css file to the administrative pages. if (path_is_admin(current_path())) { drupal_add_css($path . '/system.admin.css', array('group' => css_system)); } drupal_add_css($path . '/system.menus.css', array('group' => css_system, 'every_page' => true)); drupal_add_css($path . '/system.messages.css', array('group' => css_system, 'every_page' => true)); drupal_add_css($path . '/system.theme.css', array('group' => css_system, 'every_page' => true)); path_is_admin() は、そのドキュメントで次のように説明されている関数です。 パスがサイトの管理セクションにあるかどうかを確認します。 admin/appearanceにある設定によっては、node/<nid>/editなどの一部のノード関連パスが管理セクションに含まれる可能性があることを考慮してください。管理ページに含めることができるノードパスのリストは node_admin_paths() から返されます。 if (variable_get('node_admin_theme')) { $paths = array( 'node/*/edit' => true, 'node/*/delete' => true, 'node/*/revisions' => true, 'node/*/revisions/*/revert' => true, 'node/*/revisions/*/delete' => true, 'node/add' => true, 'node/add/*' => true, ); return $paths; 何らかの理由で、node/*のようなパスを持つページを回避する必要がある場合、path_is_admin()を使用している場合、それらを回避するために特定のコードを追加する必要があります。どのモジュールも、管理ページの一部と見なされるページを変更する可能性があることを考慮してください。どちらの場合も、モジュールが hooks_library() を次のようなコードで実装している場合は、ライブラリを使用することになります。function mymodule_library() { $path = drupal_get_path('module', 'mymodule'); $libraries['mymodule.library'] = array( 'title' => 'mymodule library', 'version' => '1.0', 'js' => array( $path . '/mymodule.js' => array(), ), 'css' => array( $path . '/mymodule.css' => array( 'type' => 'file', 'media' => 'screen', ), ), ); return $libraries; } この場合、以前のhook_form_alter()の実装は次のようになります。function mymodule_form_alter(&$form, &$form_state, $form_id) { if (arg(0) == 'admin') { $form['#attached']['library'][] = array('mymodule', 'mymodule.library'); } } drupal_add_js()およびdrupal_add_css()を呼び出す代わりに、コードはdrupal_add_library('mymodule', 'mymodule.library')を呼び出す必要があります。hook_library()を使用する利点は次のとおりです。 ライブラリ間の依存関係は自動的に処理されます。これは、次の定義を使用して2つのライブラリを定義するsystem_library()の場合に起こります。 // drupal's form library. $libraries['drupal.form'] = array( 'title' => 'drupal form library', 'version' => version, 'js' => array( 'misc/form.js' => array( 'group' => js_library, 'weight' => 1, ), ), ); // drupal's collapsible fieldset. $libraries['drupal.collapse'] = array( 'title' => 'drupal collapsible fieldset', 'version' => version, 'js' => array( 'misc/collapse.js' => array('group' => js_default), ), 'dependencies' => array( // collapse.js relies on drupalgetsummary in form.js array('system', 'drupal.form'), ), ); drupal_add_library('system', 'drupal.collapse')の呼び出し、misc/collapse.jsおよびmisc/form.jsの両方が含まれます。 ライブラリに関連付けられているcssファイルは、javascriptファイルとともに自動的に読み込まれます。 ライブラリがより多くのjavascriptまたはcssファイルを使用するときはいつでも、ライブラリを含めるコードは変更されません。それでも$form['#attached']['library'][] = array('mymodule', 'mymodule.library');またはdrupal_add_library('mymodule', 'mymodule.library')を使用します。 arg() を使用できる場合、 current_path() を使用する必要はありません。現在のページのパスがadmin/structure/blockの場合、 arg(0)は"admin"を返します arg(1)は"structure"を返します arg(2)は"block"を返します 更新drupal 8から、hook_init()は使用されなくなりました。drupal 8の代替は、hook_form_alter()を使用しています- hook_page_attachments() 、または hook_page_attachements_alter() 。 hook_page_build() および hook_page_alter() は、drupal 8.では使用されなくなりました。 #attached を使用してライブラリ(またはjavascriptファイル、またはcssファイル)をページに添付するように勧められている場合でも、javascriptライブラリの使用について私が言ったことはまだ当てはまります。 drupal 8では、javascriptまたはcssファイルのみをページに添付することはできなくなりました。javascriptとcssファイルのセットであり、最終的にはjavascriptまたはcssファイル。