Làm cách nào để thêm một khối JavaScript vào trang chủ?


8

Tôi có một khối JavaScript tôi cần thêm vào trang chủ của mình (và chỉ trang chủ của tôi) để cho phép ghi nhật ký nhấp chuột thông qua dịch vụ bản đồ nhiệt mà tôi đã đăng ký.

Họ đã chỉ định mã cần được đặt ngay trước </body>thẻ, nhưng tôi tưởng tượng nó an toàn để đặt nó ở bất cứ đâu trong <body>thẻ.

Tôi muốn đoạn trích không xuất hiện trên bất kỳ trang nào khác. Làm thế nào tôi có thể thực hiện điều này?

Tôi đang chạy Drupal 6.

Câu trả lời:


15

Nếu theo trang chủ, bạn có nghĩa là trang trước, thì bạn có thể thực hiện hook_preprocess_page()trong một mô-đun tùy chỉnh.

function mymodule_preprocess_page(&$variables) {
  if ($variables['is_front']) {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js');
    $variables['scripts'] = drupal_get_js();
  }
}

Mã tương tự hoạt động trên Drupal 7, như $variables['is_front']được đặt trong _template_pre process_default_variables () (được gọi từ template_pre process () ), sử dụng mã sau.

  // drupal_is_front_page() might throw an exception.
  try {
    $variables['is_front'] = drupal_is_front_page();
  }
  catch (Exception $e) {
    // If the database is not yet available, set default values for these
    // variables.
    $variables['is_front'] = FALSE;
    $variables['db_is_active'] = FALSE;
  }

Lý do gọi drupal_add_js()trước, và sau đó drupal_get_js()là, trong trường hợp một mô-đun khác được thực thi sau sẽ chạy mã sau, tệp JavaScript vẫn sẽ được thêm vào.

function quite_a_different_module_preprocess_page(&$vars) {
  drupal_add_js(drupal_get_path('module', 'quite_a_different_mymodule') . '/quite_a_different_module.js');
  $vars['scripts'] = drupal_get_js();
}

Sử dụng drupal_add_js(), tệp sẽ được thêm vào đầu ra được trả về từ drupal_get_js () .


Điều này có vẻ tốt, sẽ thử nó.
PHLAK

Điều này hoạt động tốt để bao gồm cả JS trong tiêu đề, nhưng có cách nào để đưa nó vào phần thân không?
PHLAK

1
@PHLAK Để đặt nó vào phần thân, bạn chỉ cần thêm một <script>thẻ vào phần thân HTML.
kiamlaluno

Tôi đã có thể thực hiện những gì tôi cần bằng cách thêm một khối nội dung ở cuối trang và giới hạn nó chỉ hiển thị trên <front>trang. Giải pháp này cũng tốt, nhưng không phải cho tình huống tôi đã ở. Cảm ơn.
PHLAK

6

Nếu mã có thể đi vào phần đầu, sau đó thêm chức năng sau vào template.php của bạn.

function MYTHEME_preprocess_page (&$vars) {
  if ($vars['is_front']) {
    $vars['scripts'] .= "// my JS for the home page";
  }
}

Bạn cũng có thể thêm mã sau vào vị trí thích hợp của page.tpl.php.

<?php if ($is_front): ?>
  // JS goes here
<?php endif; ?>

Có nhiều cách khác để thực hiện điều này, nhưng đây có lẽ là cách dễ nhất.


-3

Trong Drupal 7 nếu bạn muốn bao gồm js trong thẻ với

giải pháp cuối cùng, tập tin bạn phải sửa đổi, sau khi bạn sao chép nó trong chủ đề của bạn từ thư mục hệ thống, là html.tpl.php .

Không hoàn toàn theo cách của Drupal nhưng hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.