Добавление JavaScript и CSS на определенную страницу меню

Я создал веб-сайт Drupal 7 с несколькими пользовательскими блоками и написанными мной меню.

У меня скрипт PHP без Drupal , отображающий пользователей (некоторые из них являются внешними, т.е. не хранятся в таблицах Drupal) в виде таблицы с DataTables плагином jQuery.

Я хотел бы переписать этот скрипт как меню Drupal, чтобы его можно было назвать http://preferans.de /сверху .

Содержимое 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 и где я должен выполнять эти вызовы? Должен ли я поместить их в крючок или добавив некоторые свойства в мое меню?

7 голосов | спросил Alexander Farber 26 MaramSat, 26 Mar 2011 00:24:26 +03002011-03-26T00:24:26+03:0012 2011, 00:24:26

1 ответ


6

Как правило, файлы CSS и JavaScript добавляются с помощью hook_init () , что позволяет объединять эти файлы, когда включена агрегация.

Использование hook_init() (я предлагаю вам не делать этого, так или иначе), вы можете условно добавить файлы на основе посещаемой страницы.

function my_init() {
  if (arg(0) == 'top') {
    // Add the files.
  }
}

Причина, по которой я не предлагаю вам сделать это, заключается в том, что для каждой страницы будет вызываться hook, в том числе те, которые вы не добавляете. hook_init() обычно используется для добавления файлов на каждую страницу.

Вы можете добавить эти файлы в обратный вызов меню (a.k.a., обратный вызов страницы); если обратный вызов меню является функцией построения формы, то вы можете использовать свойство #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',
);

О встроенном коде, который вы добавляете, я бы порекомендовал вам также добавить его в файл и использовать поведение Drupal вместо $(document).ready(). Если вам нужно передать аргументы в код JavaScript, вы можете использовать настройки JavaScript (см. drupal_add_js () , чтобы детально понять, как передать настройки на код JavaScript).
Управление JavaScript в Drupal 7 подробно объясняет, как управлять кодом JavaScript в Drupal 7, а заголовки разделов Behaviors сообщают о том, как поведение Drupal изменяется в последней версии Drupal.

ответил kiamlaluno 26 MaramSat, 26 Mar 2011 00:45:31 +03002011-03-26T00:45:31+03:0012 2011, 00:45:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132