私は a Drupal 7 web site をいくつかのカスタムブロックとメニューで作成しました。
私は Drupal以外のPHPスクリプト ユーザーを表示しています(一部は外部、つまりdrupalテーブルに保存されていません)) DataTables jQueryプラグインを含むテーブル。
そのスクリプトをDrupalメニューとして書き直して、 http://preferans.de/top として呼び出せるようにしたいと思います。
my.moduleの内容は次のとおりです。
function my_menu() {
$items['top'] = array (
'title' => 'Top',
'description' => 'Top',
'page callback' => 'my_top_callback',
'access callback' => TRUE,
'file' => 'my.top.inc',
'file path' => drupal_get_path('module', 'my'),
'type' => MENU_CALLBACK,
);
return $items;
}
my.top.incの内容は次のとおりです。
function my_top_callback() {
return array (
'top_table' => array (
'#type' => 'markup',
'#markup' => generate_html_table_with_php(),
),
);
}
私の問題は、CSSおよびJavaScriptコードを追加する方法がわからないため、/ topページで使用できるが、その他のDrupalパス。
私はおそらく電話する必要があります:
drupal_add_css('/demo_table_jui.css', 'file');
drupal_add_css('/smoothness/jquery-ui-1.8.4.custom.css', 'file');
drupal_add_js('/jquery.dataTables.min.js', 'file');
drupal_add_js('
$(document).ready(function() {
$("#rating").dataTable( {
"bJQueryUI": true,
"sPaginationType": "full_numbers"
});
', 'inline');
( 私の元の非Drupalスクリプト のヘッドセクションを参照してください)。
これらの呼び出しを/ topページに制限するにはどうすればよいですか?これらの呼び出しはどこで実行する必要がありますか?それらをフックに入れるか、メニューにいくつかのプロパティを追加する必要がありますか?
通常、CSSおよびJavaScriptファイルは hook_init() を使用して追加されます。これにより、集約が有効な場合にこれらのファイルを集約できます。
hook_init()
を使用して(とにかくこれを行わないことをお勧めします)、アクセスするページに基づいてファイルを条件付きで追加できます。
_function my_init() {
if (arg(0) == 'top') {
// Add the files.
}
}
_
これを行うことをお勧めしないのは、ファイルを追加していないページを含め、すべてのページでフックが呼び出されるためです。 hook_init()
は通常、各ページにファイルを追加するために使用されます。
これらのファイルは、メニューコールバック(別名、ページコールバック)で追加できます。メニューコールバックがフォームビルダー関数の場合は、次のコードのように_#attached
_プロパティを使用できます。
_$form['#attached']['css'] = array(
drupal_get_path('module', 'ajax_example') . '/ajax_example.css',
);
$form['#attached']['js'] = array(
drupal_get_path('module', 'ajax_example') . '/ajax_example.js',
);
_
追加するインラインコードについては、それもファイルに入れ、$(document).ready()
の代わりにDrupalビヘイビアー)を使用することをお勧めします。引数を渡す必要がある場合JavaScriptコードにJavaScript設定を使用できます(JavaScriptコードに設定を渡す方法の詳細については、 drupal_add_js() を参照してください)。
JavaScriptの管理Drupal 7 は、JavaScriptコードを管理する方法を詳しく説明しています= Drupal 7、およびセクションタイトルBehaviorsは、最新のDrupal動作がどのように変更されたかを報告しますDrupal =バージョン。
メニューコールバックにコードを追加できます。 JSコードをインラインで追加する代わりに、独自のJSファイルを作成することをお勧めします。
function my_top_callback() {
drupal_add_css('/demo_table_jui.css');
drupal_add_css('/smoothness/jquery-ui-1.8.4.custom.css');
drupal_add_js('/jquery.dataTables.min.js');
drupal_add_js(drupal_get_path('module', 'my') . '/my.js');
return array (
'top_table' => array (
'#type' => 'markup',
'#markup' => generate_html_table_with_php(),
),
);
}
次に、my.js
ファイルをmyモジュールに追加する必要があります。 Drupal 7では$
はグローバル変数ではないことに注意してください。代わりにjQuery
を使用してください。
(function($) {
$(document).ready(function() {
$("#rating").dataTable( {
"bJQueryUI": true,
"sPaginationType": "full_numbers"
});
});
})(jQuery);
これをJavaScriptの動作にすることもできますが、これは推奨される動作です。これは次のようになります。
(function ($) {
Drupal.behaviors.my = {
attach: function(context, settings) {
$("#rating").dataTable( {
"bJQueryUI": true,
"sPaginationType": "full_numbers"
});
}
};
})(jQuery);