คำถามติดแท็ก hooks

ใช้สำหรับกลไกที่อนุญาตให้ขยายการทำงานของโมดูลโดยไม่ต้องแก้ไขโค้ด

14
แนวคิดพื้นฐานของ hooks คืออะไร?
ฉันเป็นสื่อกลางใน PHP เพื่อขัดเกลาทักษะของฉันฉันเริ่มเรียนรู้ Drupal 7 ในขณะที่เรียนรู้แนวคิดสถาปัตยกรรมของ Drupal คำว่าhooksและbootstrappingทำให้ฉันงงมาก ฉันอ่านหนังสือ "Pro Drupal development" และเอกสารบางอย่างเกี่ยวกับ drupal.org แต่มันก็เป็นขั้นสูงสำหรับฉันที่จะเรียนรู้วิธี hooks ทำงานใน Drupal เพื่อแสดงหน้าเว็บ ทุกคนสามารถบอกฉันได้ไหมว่า hooks อยู่ในคำง่าย ๆ ?

8
ฉันจะปิดบังสิ่งที่ฉันใช้เพื่อเรียกใช้เว็บไซต์ของฉันได้อย่างไร
มีสิ่งใดที่ฉันสามารถทำได้เพื่อป้องกันไม่ให้ใครบางคนรู้ว่าไซต์ของฉันกำลังใช้ Drupal โดยดูที่ซอร์สโค้ดของหน้าแรกหรือไม่ ฉันหมายถึงผู้ที่สแกนไซต์โดยใช้ซอฟต์แวร์ที่ตรวจพบซอฟต์แวร์ที่ใช้ในการเรียกใช้เว็บไซต์เพื่อให้สามารถโจมตีไซต์นั้นได้โดยใช้จุดอ่อนที่ทราบ ถ้ามันเป็นไปไม่ได้ที่จะสมบูรณ์ซ่อนความจริงที่ว่าเว็บไซต์ที่มีการใช้ Drupal, มันเป็นอย่างน้อยไปได้ที่จะสร้างความสับสนให้พวกเขา (เช่นโดย aliasing หน้าโหนดที่มี URL ที่ชอบhttp://example.com/servlets/<node-id>.jsp)?
72 hooks 

5
ฉันต้องการงาน cron เพื่อประมวลผลคิวหรือไม่?
ฉันมีงานที่ต้องใช้เวลาดำเนินการประมาณ 45 นาทีและต้องเกิดขึ้นทุกวัน (เชื่อมข้อมูลผู้ใช้กับฐานข้อมูลภายนอกหลายแห่งและอื่น ๆ ) เพื่อจัดการงานฉันได้ตั้งค่าคิว cron ด้วยhook_cron_queue_info()ดังนี้ function mymodule_cron_queue_info() { $queues = array(); $queues['update_users_queue'] = array( 'worker callback' => '_mymodule_process_user_queue_item', 'time' => 120, ); return $queues; } ฉันเติมคิวโดยใช้ฟังก์ชั่นนี้: function mymodule_queue_all_users_for_synching() { //...query for users... $queue = DrupalQueue::get('update_users_queue'); foreach($users as $user) { $queue->createItem($user); } } ฟังก์ชั่นการกรอกคิวได้รับการเรียกว่าเป็นงาน cron ฉันใช้Elysia Cronดังนั้นการนำไปใช้ของฉันhook_cronapi()คือ: …
32 7  hooks  cron  queue 

4
วิธีใช้ drupal_mail () เพื่อส่งอีเมลด้วยเทมเพลตที่กำหนดเอง
ฉันต้องการใช้drupal_mail()ฟังก์ชั่นเพื่อส่งอีเมล แต่มีเทมเพลต HTML ที่กำหนดเองเพื่อให้สอดคล้องกับการออกแบบเว็บไซต์ของฉัน แต่ฉันเป็นมือใหม่ที่สมบูรณ์ในการขอและโมดูล ฯลฯ ดังนั้นฉันขอขอบคุณคำอธิบายบางอย่างหรือ โปรดเริ่มต้นคู่มือ ฉันสามารถสร้างเทมเพลตได้ฉันต้องรู้วิธีdrupal_mail()ใช้งาน
31 7  hooks  emails 

5
วิธีปฏิบัติที่ดีที่สุดสำหรับคีย์ภาษาสำหรับ“ und” ใน hook_form_alter
ฉันกำลังแก้ไขในฟอร์มในโมดูลที่กำหนดเองของฉัน รหัสดูเหมือนว่า: function my_module_form_alter(&$form, &$form_state, $form_id) { if ($form_id == "someID") { $form['field_charity_author']['und'][0]['value']['#value'] = arg(3); //$form['field_charity_author']['#type'] = 'hidden'; } } อย่างไรก็ตามฉันคิดว่าการเข้ารหัสยากundนั้นไม่ดี สิ่งที่ควรเป็นวิธีที่เหมาะสมในการปรับเปลี่ยนเขตข้อมูลฟอร์มอย่างถูกต้องในกรณีนี้
30 7  entities  hooks  i18n-l10n 

2
วิธี drupal ตัดสินใจสั่งการดำเนินการของเบ็ดเดียวกันในโมดูลที่แตกต่างกันอย่างไร
หากมีสองโมดูล A และ B และทั้งสองมี user_login hook เดียวกัน ดังนั้นเมื่อฉันเข้าสู่ระบบออกจาก A_user_login () และ B_user_login () ฟังก์ชั่นที่หนึ่งเรียกว่า first.and วิธี drupal ตัดสินใจสั่งการดำเนินการของทั้งสองฟังก์ชั่น
22 7  hooks 

2
วิธีที่ดีที่สุดในการดร็อปฟิลด์จากประเภทเนื้อหา
วิธีที่ดีที่สุดในการลบฟิลด์ Drupal 7 ออกจากประเภทเนื้อหาที่กำหนดผ่าน GUI คืออะไร ฉันต้องการใช้ hook_update_N เพื่อให้การเปลี่ยนแปลงสามารถแพร่กระจายไปยังเซิร์ฟเวอร์หลายเครื่องเมื่อเรียกใช้ update.php อย่างไรก็ตามฉันไม่สามารถหาทางแก้ไขได้ db_drop_table () จะเหมาะสมสำหรับฉันสำหรับ schema ที่กำหนดเอง แต่ไม่ใช่สำหรับชนิดเนื้อหา / ฟิลด์ที่กำหนดผ่าน GUI
21 7  entities  hooks  updating 

3
ระบุ $ form elements ที่จะแยกออกจาก display หรือไม่
ฉันต้องการซ่อนองค์ประกอบบางอย่างในแบบฟอร์มโดยใช้ form_alter หรือไฟล์เทมเพลต ฉันได้อ่านที่ไหนสักแห่งว่าใน Drupal 7 เราสามารถระบุองค์ประกอบของ $ form ดังนั้นมันจะไม่แสดงในรูปแบบ แต่ฉันจำไม่ได้! ไม่ได้ล้าง () แต่มีฟังก์ชั่นอื่น!
20 7  hooks  forms  theming 

5
ฉันจะใช้ hook_views_query_alter () ได้อย่างไร
ต่อไปนี้สิ่งที่รายงานในเอกสารสำหรับhook_views_query_alter ()ผมสร้างไฟล์ชื่อและใส่ลงในโมดูลที่เปิดใช้งานที่เรียกว่าalterform.views.inc alterformฉันเพิ่มรหัสต่อไปนี้ใน. alterform.views.incแต่มันไม่ทำงาน function alterform_views_query_alter(&$view, &$query) { switch($view->name) { case 'myViewName': echo 'test test'; // test $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC"; $query->orderby[1] = "node_title ASC"; break; } } เหตุใดจึงไม่ส่งออก "ทดสอบทดสอบ" เกิดอะไรขึ้นกับรหัสของฉัน ยังไม่มีผลลัพธ์ของการทดสอบและมุมมอง เกิดอะไรขึ้นกับรหัสของฉัน ขอขอบคุณ
20 7  views  hooks 

4
วิธีรับ hook_install () เพื่อเรียกใช้ hook_update_N ทั้งหมด ()
ฉันจะขอ hook_install () เพื่อเรียกใช้การอัปเดตทั้งหมดที่มีสำหรับโมดูลได้อย่างไร ฉันมีมันในไฟล์ติดตั้ง mymod ฉันเหนื่อย function mymod_install() { mymod_update_6001(); } แต่ดูเหมือนจะไม่ทำอะไรเลย หากฉันมี mymod_update_6002 () ฉันจะยังคงโทรหา 6001 () ได้เพียงแค่เรียก 6002 () หรือโทรทั้งสองตามลำดับที่ 6001 (), 6002 () ฉันคิดว่าการเปิดใช้งานการปรับปรุงทั้งหมดเป็นเรื่องปกติถ้าคุณติดตั้งโมดูลเป็นค่าเริ่มต้น
18 6  hooks  installing 


2
คุณมีตัวอย่างของ hook_menu () access callback หรือไม่?
ฉันได้ดาวน์โหลดโครงการตัวอย่างแล้ว แต่ในโมดูล menu_example ทั้งหมดaccess callbackจะถูกตั้งค่าเป็นtrue.. ยากที่จะเข้าใจวิธีการทำงาน ในตัวอย่างของฉันรายการ meno ของฉันควรปรากฏบนโหนด แต่เฉพาะสำหรับบทบาทที่มีสิทธิ์ในการแก้ไขโหนดของตนเอง ฉันไม่สามารถหาตัวอย่างได้จากการโทรกลับเข้าใช้งาน มีใครบ้างไหม
18 7  routes  hooks  users 

2
ฉันจะตรวจพบได้เมื่อมีการเปลี่ยนโหนดจาก 'เผยแพร่' เป็น 'ไม่เผยแพร่'
ในhook_node_update ()ฉันสามารถบอก 'สถานะ' ของโหนดได้อย่างง่ายดาย (ไม่ว่าจะเผยแพร่หรือไม่ก็ตาม) หลังจากอัปเดตแล้ว อย่างไรก็ตามมีวิธีที่ง่ายในการตรวจสอบเพื่อดูว่าโหนดที่อัพเดตถูกเผยแพร่ แต่ตอนนี้ไม่ใช่หรือไม่? (หรือในทางกลับกัน)? ฉันคิดว่ากฎอาจมีเงื่อนไขบางอย่างสำหรับ 'ค่าโหนดเปลี่ยนไป' หรือบางอย่างตามบรรทัดเหล่านั้น แต่ฉันต้องการทำสิ่งนี้โดยทางโปรแกรม ฉันพบปัญหานี้โดย fago (ผู้พัฒนากฎ) บน drupal.org ที่ดูเหมือนจะจัดการกับสิ่งนี้ใน Drupal 7 แต่คำอธิบายที่ดีจะได้รับการชื่นชม
17 7  nodes  entities  hooks 

2
ฉันจะเปลี่ยนเครื่องมือจัดการการส่งฟอร์มได้อย่างไร
ด้วยเหตุผลบางอย่างฉันต้องแทนที่อักขระบางตัว (ถ้ามี) ในทุก ๆ textfields ในรูปแบบใด ๆ ก่อนที่พวกเขาจะถูกเก็บไว้ในฐานข้อมูล กล่าวอีกนัยหนึ่งฉันต้องการตะขอที่ฉันสามารถรับข้อมูลที่ส่งมาทั้งหมดและแทนที่ตัวละครของพวกเขา ฉันพบวิธีแก้ปัญหานี้: function hook_form_alter($form, $form_state, $form_id) { $form['#submit'] = 'my_custom_submission_function'; } แต่นี่ไม่ใช่ความคิดที่ดีเพราะฉันต้องดูแลความคืบหน้าของการส่งที่เหลือด้วย ฉันต้องการแทนที่ตัวละครบางตัว มีเบ็ดทำเช่นนี้? การแก้ปัญหาคืออะไร?
16 7  hooks  forms 

9
มีวิธีการขอล้างแคชหรือไม่
สำหรับเว็บไซต์ของสถาบันขนาดใหญ่ที่มีแคชจำนวนมากฉันต้องการสร้างแคชโดยเร็วที่สุดเพื่อไม่ให้ผู้ใช้มาถึงรุ่นแคช ... ฉันมีชุด cron ทุกนาทีที่ทำได้โดยการใช้งานฟังก์ชั่นบางอย่างและขอหน้าสำคัญ แต่สิ่งที่ฉันกำลังมองหาคือวิธีที่จะรู้ว่าเมื่อแคชเพิ่งจะถูกล้างโดยเฉพาะอย่างยิ่งตะขอดังนั้นฉันสามารถเปิดสิ่งนี้ สร้างฟังก์ชั่น ความคิดใด ๆ
16 7  hooks  caching 

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