it-swarm-vi.com

Thêm JavaScript vào một loại nội dung cụ thể

Tôi muốn biết cách tốt nhất để thêm tệp JavaScript vào một trang cụ thể dựa trên loại nội dung. Ví dụ, tôi muốn thêm điều này:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

Cho đến nay, những gì tôi đã làm là sử dụng cách này để thêm vào loại nội dung cụ thể của mình. Đối với loại nội dung map_page, tôi thêm hai dòng mã bên dưới vào trang - map_page.tpl.php.

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

Có cách nào khác tốt hơn không? nếu có thể có thể đưa ra một số ví dụ, hiện tại không thực sự hiểu rõ ...

9
arkchong

Tôi không thể nhận xét về tương ứng Drupal 7, nhưng trong Drupal 6 trang web tôi làm điều này trong một template_pre process_page .

Tôi sẽ có một số logic để đưa ra quyết định (dựa trên arg() hoặc page_manager_get_current_page() từ các bảng), và sau đó thêm $vars["scripts"] với tập lệnh bên ngoài. Tôi trả trước để tôi không gặp rắc rối phụ thuộc với bất kỳ tập lệnh cục bộ nào.

Thỉnh thoảng tôi cũng sẽ thiết lập một khu vực mới gọi là $global_scripts vì nghĩ như Google API và SWFObject mà tôi muốn tải từ CDN và điều này sẽ được in ra trước $scripts trong mẫu trang.

Thành thật mà nói, mặc dù tôi thường có tất cả JS trên tất cả các trang để các tệp được lưu trữ.

6
mpdonadio

Vì Drupal sẽ không cho phép bạn xác định lại template_preprocess_node (vì nó đã được xác định trong node.module), tôi đã thêm một hàm tiền xử lý trong mô-đun tùy chỉnh của mình:

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

Tôi đã sử dụng preprocess_node chứ không phải preprocess_page bởi vì nó dễ dàng hơn để đến loại nút. Nếu bạn thực sự tham chiếu một tệp javascript, thì nó sẽ được tự động lưu vào bộ đệm ( xem phần Tham số ).

6
Jukebox

bạn cũng có thể sử dụng kiểm tra hook_node_view cho loại nội dung và sau đó thêm js theo cách bạn đang làm.

OR

Nếu bạn có một trường xuất ra thông tin sẽ sử dụng JS, hãy sử dụng bộ tiền xử lý ở đó để thêm js, do đó, bao gồm js phụ thuộc vào trường hiển thị bản đồ thay vì loại nội dung.

2
Jeremy French

Một giải pháp đơn giản là chỉ cần đặt add_js:

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

trong trang/nút template.php.

0
Nevos