วิธีที่ถูกต้องในการเพิ่ม JS และ CSS ไปยังโหนด / แก้ไขและรูปแบบอื่น ๆ


10

ฉันกำลังสร้างเว็บไซต์ที่มี JS จำนวนมากและฉันสงสัยว่าฉันควรใส่รหัส JS ไว้ที่ใด อย่างดีที่สุดฉันต้องการให้ JS กับแต่ละโมดูลไม่ใช่เลเยอร์ธีม เนื้อหาบางอย่างอาจถูกเปิดเผยเป็นบล็อกเป็นต้น

แต่ฉันมีปัญหาบางอย่างกับแคช ในตัวอย่างของฉันฉันต้องเพิ่ม JS & CSS ในแบบฟอร์มการแก้ไขโหนด ฉันใช้ hook_block_view แล้ว แต่ถูกแคชไว้ ดังนั้นหากมีข้อผิดพลาดในรูปแบบการแก้ไขโหนดฟังก์ชัน drupal_add_js & drupal_add_css จะไม่ถูกเรียกใช้ ดูเหมือนจะเป็นจริงสำหรับ hook_node_prepare

คุณจะใส่ชั้น JS & CSS ที่ไหน และมี hooks ที่เรียกว่าแม้ว่าจะมีข้อผิดพลาดในแบบฟอร์มการแก้ไขโหนด?

คำตอบ:


6

หากคุณต้องการเพิ่ม JS และ CSS ในหน้าแก้ไขโหนดโดยเฉพาะ (หรือรูปแบบใด ๆ โดยทั่วไป) สิ่งที่ดีที่สุดและเหมาะสมที่จะทำคือ hook_form_alter () และคุณสมบัติที่คุณควรใช้คือ #after_build

ความคิดเห็นเกี่ยวกับ DO นี้จะบอกคุณว่าจะต้องทำอย่างไร - http://drupal.org/node/1253520#comment-4881588

หวังว่านี่จะช่วย :-)


ขอบคุณสิ่งที่ฉันต้องการ มีแบบฟอร์มที่ดีตอนนี้ดีกว่าค่าเริ่มต้นเขา ความคิดเห็นเกี่ยวกับสถาปัตยกรรมของเว็บไซต์ดังกล่าวหรือไม่?
เจนส์

ดีใจที่มันทำงาน เมื่อเป็นเช่นนั้นคุณควรทำเครื่องหมายคำตอบว่า 'คำตอบที่ยอมรับ' ดังนั้นคำถามจะไม่ปรากฏในรายการคำถามที่ยังไม่ได้รับคำตอบและบุคคลที่ช่วยเหลือคุณจะได้รับ "กรรม" ฉันเห็นว่าคุณยังใหม่ที่นี่ ฉันก็เหมือนกัน แต่ฉันมีบัญชีที่ใช้งานมากขึ้นในบริการ StackOverflow อื่น ๆ และฉันรักที่นี่
Sumeet Pareek

และโอ้ .. เพียงแค่รู้ว่าคุณต้องการ JS CSS ในแบบฟอร์มและพยายามที่จะแสดงความคิดเห็นในสถาปัตยกรรมของเว็บไซต์จะไม่น้อยกว่าอาชญากรรม :-p
Sumeet Pareek

แน่นอนตอบตอนนี้
เจนส์

1
@SumeetPareek ฉันลงคะแนนคำตอบของคุณ (แต่ไม่มีความผิด) เพราะ#attachedแนะนำให้ใช้ในเกือบทุกกรณี ยิ่งกว่านั้น drupal_add_js / css จะถูกคัดค้านใน Drupal 8
AyeshK

6

คุณควรใช้คุณสมบัติ#attachedเพื่อให้แน่ใจว่า JS / CSS ได้รับการโหลดอย่างถูกต้องพร้อมกับองค์ประกอบการแสดงผลอื่น


ฉันรู้สึกว่าสิ่งนี้จะได้ประโยชน์จากตัวอย่างของวิธีใช้#attachedและอาจมีข้อมูลเพิ่มเติมเกี่ยวกับปัญหาที่คุณหลีกเลี่ยง
Michael Greisman

@MichaelGreisman ฉันต้องบอกว่าฉันไม่เห็นคุณค่าของการเพิ่มโค้ดแบบอินไลน์ที่นี่ทันที มันจะได้รับการปรับปรุงให้ดีขึ้นตามลิงก์ที่ฉันให้ไว้ซึ่งเป็นเอกสารอย่างเป็นทางการเกี่ยวกับวิธีการทำ คำตอบของฉันอธิบายสิ่งที่จะทำ แต่เอกสารแบบฟอร์ม API เป็นสถานที่ที่เหมาะสมสำหรับวิธีการ
Letharion

3

ฉันรู้สึกว่าคำตอบและความคิดเห็นเหล่านี้จำเป็นต้องมีรหัสตัวอย่างโดยเฉพาะอย่างยิ่ง @AyeshK และ @Letharion นี่ยาวเกินไปสำหรับความคิดเห็นดังนั้นโปรดให้อภัยคำตอบ หากเป็นประโยชน์กับคุณโปรดโหวตด้วยคำตอบของ Sumeet หรือ Letharion นอกจากนี้ตัวอย่างต่อไปนี้จะเพิ่ม CSS อย่างเห็นได้ชัด แต่เกือบจะเหมือนกันสำหรับการเพิ่มจาวาสคริปต์

การใช้คำตอบของ @ Sumeet แต่การใช้#attachedคุณสมบัติแทนdrupal_add_cssดูเหมือนว่า:

/* Implements hook_form_FORM_ID_alter() */
function MY_MODULE_form_MY_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $form['#after_build'][] = 'MY_MODULE_some_function_name_after_build';
}

function MY_MODULE_some_function_name_after_build($form, &$form_state) {
  $style_path = drupal_get_path('module','MY_MODULE') . '/css/my_css.css';
  // drupal_add_css('file', $style_path);
  $form['#attached']['css'][] = $style_path;
  return $form;
}

ในที่สุดการคัดค้านของdrupal_add_cssสามารถพบได้ในโพสต์นี้ นั่นอาจเป็นข่าวสำหรับหลาย ๆ คนที่ drupal_add_xxx ทำงานได้ดีเหมือนเดิมสำหรับฉัน


#after_buildบิตคือการที่ดีที่สุดของเรื่องไร้สาระความรู้ของฉันและควรก็จะถูกลบออก (มีความคิดเห็นคล้ายกันกับคำตอบที่ให้การ#after_buildแก้ปัญหา) ฉันคิดว่านี่ในตัวเองอธิบายว่าทำไมคำตอบสั้น ๆ ของฉันดี หากคุณดูลิงก์ที่ฉันให้ไว้อย่างง่ายคุณจะพบรหัสเดียวกัน แต่ไม่มีบิตที่ไม่จำเป็น
Letharion

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