ฉันใช้ฟังก์ชัน API ใดในการเปลี่ยนเส้นทางไปยัง URL ภายนอก


21

เมื่อเขียนโมดูลสำหรับการเปลี่ยนเส้นทางไปยังเส้นทาง Drupal drupal_gotoหนึ่งใช้

มีฟังก์ชั่น API ที่ฉันควรใช้เพื่อเปลี่ยนเส้นทางไปยังหน้าภายนอกหรือไม่? หรือตั้งค่าLocationด้วยdrupal_set_headerวิธีที่จะไป?

ป.ล. ฉันต้องทำการประมวลผลบางอย่างตามคำขอ; mod_rewrite/ mod_aliasใน Apache-level หรือPath redirectโมดูลDrupal อย่าแก้ปัญหาของฉัน

คำตอบ:


25

คุณควรใช้drupal_goto ()สำหรับการเปลี่ยนเส้นทางภายในและภายนอก

ใช้ตัวเลือก 'ภายนอก' สำหรับการเปลี่ยนเส้นทางภายนอก: drupal_goto($url, array('external' => TRUE));

drupal_goto ($ path = '', array $ options = array (), $ http_response_code = 302)

$ options: (เป็นทางเลือก) อาร์เรย์เชื่อมโยงของตัวเลือกเพิ่มเติมโดยมีองค์ประกอบต่อไปนี้:

  • 'query' : อาร์เรย์ของคีย์คิวรี / คู่ค่า (ไม่มีการเข้ารหัส URL ใด ๆ ) เพื่อต่อท้าย URL
  • 'fragment' : ตัวระบุส่วน (ชื่อสมอ) เพื่อต่อท้าย URL ห้ามใส่อักขระ '#' นำหน้า
  • 'absolute' : ค่าเริ่มต้นเป็น FALSE จะบังคับให้เอาต์พุตเป็นลิงก์สัมบูรณ์หรือไม่ (ขึ้นต้นด้วย http :) มีประโยชน์สำหรับลิงก์ที่จะแสดงนอกไซต์เช่นในฟีด RSS
  • 'alias' : ค่าเริ่มต้นเป็น FALSE เส้นทางที่กำหนดนั้นเป็นชื่อแทน URL หรือไม่
  • 'ภายนอก' : เส้นทางที่กำหนดเป็น URL ภายนอกหรือไม่
  • 'ภาษา' : วัตถุภาษาที่เป็นตัวเลือก หากเส้นทางที่เชื่อมโยงไปยังอยู่ภายในเว็บไซต์นั้น $ options ['language'] จะถูกใช้เพื่อค้นหาชื่อแทน URL หากไม่ใส่ $ options ['language'] จะใช้ระบบ $ language_url ทั่วโลก
  • 'https' : URL นี้ควรชี้ไปยังตำแหน่งที่ปลอดภัยหรือไม่ หากไม่ได้กำหนดโครงร่างปัจจุบันจะถูกใช้ดังนั้นผู้ใช้จะยังคงใช้ HTTP หรือ HTTPS ตามลำดับ TRUE บังคับใช้ HTTPS และ FALSE บังคับใช้ HTTP แต่ HTTPS สามารถบังคับใช้ได้เมื่อตัวแปร 'https' ถูกตั้งค่าเป็น TRUE
  • 'BASE_URL' : ใช้ภายในเท่านั้นเพื่อแก้ไข URL พื้นฐานเมื่อ URL ที่ต้องใช้ภาษานั้นต้องการ
  • 'คำนำหน้า' : ใช้ภายในเท่านั้นเพื่อแก้ไขพา ธ เมื่อ URL ที่ขึ้นกับภาษาต้องการ
  • 'script' : ชื่อไฟล์สคริปต์ในไดเรกทอรีรูทของ Drupal ที่จะใช้เมื่อ URL ที่สะอาดถูกปิดใช้งานเช่น 'index.php' เริ่มต้นเป็นสตริงว่างเปล่าเนื่องจากเว็บเซิร์ฟเวอร์ที่ทันสมัยส่วนใหญ่จะค้นหา 'index.php' โดยอัตโนมัติ หากปิดการใช้งาน URL ที่สะอาดแล้วจะมีการเพิ่มค่าของ $ path เป็นพารามิเตอร์การสืบค้น 'q' ถึง $ options ['script'] ใน URL ที่ส่งคืน เมื่อปรับใช้ Drupal บนเว็บเซิร์ฟเวอร์ที่ไม่สามารถกำหนดค่าให้ค้นหา index.php โดยอัตโนมัติดังนั้น hook_url_outbound_alter () สามารถนำไปใช้เพื่อบังคับให้ค่านี้เป็น 'index.php'
  • 'entity_type' : ประเภทเอนทิตีของวัตถุที่เรียกว่า url () เอนทิตี้ของ () ตั้งเฉพาะเมื่อมีการเรียกใช้ url () โดย entity_uri ()
  • 'เอนทิตี' : วัตถุเอนทิตี (เช่นโหนด) ซึ่ง URL ถูกสร้างขึ้น เอนทิตี้ของ () ตั้งเฉพาะเมื่อมีการเรียกใช้ url () โดย entity_uri ()

$ http_response_code: (เป็นตัวเลือก) รหัสสถานะ HTTP ที่จะใช้สำหรับการเปลี่ยนเส้นทางเริ่มต้นที่ 302 ค่าที่ถูกต้องสำหรับรหัสสถานะการเปลี่ยนเส้นทาง 3xx ถูกกำหนดใน RFC 2616 และร่างสำหรับรหัสสถานะ HTTP ใหม่:

301: ย้ายอย่างถาวร (ค่าที่แนะนำสำหรับการเปลี่ยนเส้นทางส่วนใหญ่)

302: พบ (ค่าเริ่มต้นใน Drupal และ PHP ซึ่งบางครั้งใช้สำหรับเครื่องมือค้นหาสแปม)

303: ดูอื่น ๆ

304: ไม่ได้แก้ไข

305: ใช้พร็อกซี

307: การเปลี่ยนเส้นทางชั่วคราว

Drupal 8

Drupal 8 ได้ลบฟังก์ชั่น drupal_gotoสำหรับการเปลี่ยนเส้นทางไปยัง URL ภายนอกดูคำตอบสำหรับคำถามนี้: ฉันจะเปลี่ยนเส้นทางไปยัง URL ภายนอกได้อย่างไร .


1
คำตอบที่ดีมาก
OV

+1 tunic (และ Nikhil M สำหรับการแก้ไขอินพุต) คำตอบนี้ดีกว่าเอกสาร API อย่างเป็นทางการ: api.drupal.org/api/drupal/includes%21common.inc/function/… (ในคำตอบของคุณอาร์เรย์ตัวเลือกจะครอบคลุมทั้งหมด อธิบาย) +1 ยัง Oleg สำหรับการรับรู้
therobyouknow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.