เพิ่ม JavaScript ลงในประเภทเนื้อหาที่เฉพาะเจาะจง


9

ฉันต้องการทราบว่าวิธีที่ดีที่สุดในการเพิ่มไฟล์ JavaScript ลงในหน้าเว็บที่ระบุนั้นขึ้นอยู่กับประเภทเนื้อหาคืออะไร ตัวอย่างเช่นฉันต้องการเพิ่มสิ่งนี้:

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

จนถึงตอนนี้สิ่งที่ฉันทำคือใช้วิธีนี้เพื่อเพิ่มลงในประเภทเนื้อหาเฉพาะของฉัน สำหรับประเภทเนื้อหา map_page ฉันเพิ่มโค้ดสองบรรทัดด้านล่างในหน้า - map_page.tpl.php

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

มีวิธีอื่นที่ดีกว่านี้ไหม? หากเป็นไปได้สามารถยกตัวอย่างบางอย่างในขณะนี้ไม่เข้าใจจริงๆ ...

คำตอบ:


6

ฉันไม่สามารถแสดงความคิดเห็นในที่เหมาะสม Drupal 7 เทียบเท่า แต่ใน Drupal 6 เว็บไซต์ที่ฉันทำเช่นนี้ในtemplate_preprocess_page

ฉันจะมีตรรกะบางอย่างในการตัดสินใจ (ขึ้นอยู่กับarg()หรือpage_manager_get_current_page()จากแผง) แล้วเสริม$vars["scripts"]ด้วยสคริปต์ภายนอก ฉันเพิ่มเพื่อที่ฉันจะได้ไม่เกิดปัญหากับการพึ่งพาสคริปต์ท้องถิ่นใด ๆ

บางครั้งฉันจะตั้งค่าภูมิภาคใหม่ที่เรียกว่า$global_scriptsThinks เช่น Google API และ SWFObject ที่ฉันต้องการโหลดจาก CDN และสิ่งนี้จะถูกพิมพ์ออกมาก่อน$scriptsในเทมเพลตหน้า

ตามจริงแล้วฉันมักจะมี JS ทั้งหมดในทุกหน้าเพื่อให้ไฟล์ถูกแคช


6

เนื่องจาก Drupal จะไม่ยอมให้คุณกำหนดใหม่template_preprocess_node(เพราะมันถูกกำหนดไว้แล้วใน node.module) ฉันจึงเพิ่มฟังก์ชั่นพรีโปรเซสเซอร์ในโมดูลที่กำหนดเองของฉัน:

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

ฉันใช้preprocess_nodeมากกว่าpreprocess_pageเพราะง่ายกว่าที่จะไปที่ประเภทโหนด หากคุณอ้างอิงไฟล์จาวาสคริปต์จริงไฟล์นั้นจะถูกแคชโดยอัตโนมัติ ( ดูหัวข้อพารามิเตอร์ )


2

คุณสามารถใช้ hook_node_view ตรวจสอบประเภทเนื้อหาแล้วเพิ่ม js ในแบบที่คุณทำอยู่แล้ว

หรือ

หากคุณมีฟิลด์ที่ส่งออกข้อมูลซึ่งจะใช้ JS ใช้ตัวประมวลผลล่วงหน้าเพื่อเพิ่ม js ดังนั้น js จะขึ้นอยู่กับฟิลด์ที่แสดงแผนที่แทนประเภทเนื้อหา


0

วิธีแก้ปัญหาง่ายๆคือการวาง add_js:

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

ในหน้า / โหนด template.php

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.