回答:
モジュールを使用すると、次の2つの方法を実行できます。
最初の方法では、追加の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()は、ドキュメントで次のように説明されている関数です。
パスがサイトの管理セクションにあるかどうかを確認します。
node/<nid>/edit
admin / appearanceの設定に応じて、などのノード関連のパスを管理セクションに含めることができることを考慮してください。
管理ページに含めることができるノードパスのリストは、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"
hook_init()
使用しているDrupalの8のDrupal 8のための代替からもはや使用されないhook_form_alter()
、hook_page_attachments()
またはhook_page_attachements_alter()
。hook_page_build()
そして hook_page_alter()
もうDrupalの8で使用されていない
私はJavaScriptライブラリを使用する方法について述べた何は、使用することが提案されている場合でも、まだ真である#attached
ページへのライブラリー(またはJavaScriptファイル、またはCSSファイル)を添付すること。Drupal 8では、JavaScriptファイルまたはCSSファイルだけをページに添付することはできなくなりました。常にJavaScriptファイルとCSSファイルのセットであるライブラリを添付する必要がありますが、最終的にはJavaScriptファイルまたはCSSファイルのみで構成されます。
arg(0) == 'admin'
とuser_access('access administration pages')
。
path_is_admin
機能です。一部の管理ページのパスは「admin」で始まりません。たとえば、構成によっては、node/add/<content-type>
ページが構成ページである場合があります。
JS / CSSをページに追加する2つの方法を次に示します。
テンプレートファイルはPHPファイルであるため、JavaScriptとCSSをテンプレートファイルpage.tpl.phpに直接追加できます。arg ()を使用してURLを確認し、それに応じて表示できます。
または、テーマに依存しないため、hook_init()を実装するモジュールを作成し、current_path()に基づいてdrupal_add_js()またはdrupal_add_css()を呼び出します。
次のコードのようなものが機能します。
// Runs on every page load.
function mymodule_init() {
// Check if current path is under "admin"
if (substr(current_path(), 0, 5) == 'admin') {
drupal_add_css('path/to/my/css');
drupal_add_js('path/to/my/js');
}
}
ここで説明する手順を使用してモジュールを作成しました:http : //purewebmedia.biz/article/2014/04/23/adding-your-own-css-admin-theme
そのページに記載されているようにモジュールテキストをコピーしました。
function mymodule_preprocess_html(&$variables) {
// Add conditional stylesheets for admin pages on admin theme.
if (arg(0)=="admin") {
// reference your current admin theme
$theme_path = drupal_get_path('theme', 'commerce_kickstart_admin');
// reference your own stylesheet
drupal_add_css(drupal_get_path('module', 'mymodule') . '/css/mymodule.css', array('weight' => CSS_THEME));
}
}
ただし、ノードの編集フォームだけでなく、すべてのページで送信ボタンのスタイルを設定しようとしたときに、管理者チェックに誤りがありました。そのパスは管理者ではなくノード/編集に行くので、このチェックは何時間も頭を悩ませました。
そこで、このバージョンを思いついて、admin_cssという簡単なモジュールを作成しました。
admin_css.info
name = admin_css
description = Custom css alterations for editor interface
core = 7.x
version = 7.x-1.01
admin_css.module
function admin_css_preprocess_html(&$variables) {
if (path_is_admin) {
$theme_path = drupal_get_path('theme', 'seven');
drupal_add_css(drupal_get_path('module', 'admin_css') . '/css/admin_css.css', array('weight' => 0));
}
}
ここでの答えと異なるのは、argを使用する代わりにpath_is_adminでサイトの管理部分にパスがあるかどうかを確認することです。argを使用すると、css-fileがノード編集およびその他のページにロードされませんでした。
からJSとCSSを追加するのは悪い習慣と考えられていhook_init()
ます。代わりに使用しますhook_page_build()
:
/**
* Implements hook_page_build().
*/
function MYMODULE_page_build(&$page) {
if (path_is_admin(current_path())) {
drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/scripts/magic.js');
}
}