มีตะขออะไรบ้างในการแก้ไข URL? ตัวอย่างเช่นมีโมดูลภาษาที่เมื่อเปิดใช้งานให้ URL ที่เช่นแทนที่จะปล่อยให้มันเป็น/en/node/1
/node/1
ฉันต้องการมีสิ่งที่คล้ายกันใน url ที่ฉันสามารถเข้าถึงได้โดยไม่ต้องใช้ฟังก์ชั่นอื่น ๆ
สิ่งนี้สำเร็จได้อย่างไร
มีตะขออะไรบ้างในการแก้ไข URL? ตัวอย่างเช่นมีโมดูลภาษาที่เมื่อเปิดใช้งานให้ URL ที่เช่นแทนที่จะปล่อยให้มันเป็น/en/node/1
/node/1
ฉันต้องการมีสิ่งที่คล้ายกันใน url ที่ฉันสามารถเข้าถึงได้โดยไม่ต้องใช้ฟังก์ชั่นอื่น ๆ
สิ่งนี้สำเร็จได้อย่างไร
คำตอบ:
ดังนั้นคุณกำลังมองหาวิธีในการปรับเปลี่ยนลิงค์ URL ที่มันถูกเขียน? ฉันดูเรื่องนี้เมื่อเร็ว ๆ นี้และรู้สึกประหลาดใจที่ต้องล่าสัตว์เท่าไหร่
ฉันไปด้วยhook_url_outbound_alter( &$path, &$options, $original_path )
ซึ่งช่วยให้คุณสามารถแก้ไขลิงค์ URL ที่เขียนโดยระบบ Drupal URL
นอกจากนี้ยังมีhook_url_inbound_alter( &$path, $original_path, $path_language )
ซึ่งอาจจะดีกว่าเนื่องจากมีการระบุเฉพาะของพา ธ - ขึ้นอยู่กับว่าคุณต้องการให้มีการแก้ไขที่ใด ฉันพบว่าตัวเองhook_url_outbound_alter()
เชื่อถือได้และใช้งานง่าย - มันเปลี่ยน URL ที่เหมาะสมทั้งหมดตามที่เขียนและใช้ $ options คุณสามารถเพิ่มและแก้ไขสตริงการสืบค้น (... ? query = string & foo = bar) และ hang frangments (... #someId)
ปรับเปลี่ยน $ path และจะอัปเดตพา ธ จริงที่เขียนลงใน URL href แน่นอนว่าสิ่งนี้ทำงานบนลิงก์ทั้งหมดดังนั้นคุณจะต้องเริ่มต้นด้วยการตรวจสอบว่าเป็นลิงก์ที่คุณต้องการแก้ไข
มันดำเนินการก่อนการสร้างนามแฝงดังนั้นมันจะขึ้นอยู่กับค่าเริ่มต้นของ Drupal เพื่อให้ตัวอย่างง่าย ๆ สองตัวอย่างถ้าคุณต้องการแก้ไขเส้นทาง taxonomy เท่านั้น:
function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
if(strpos($original_path, 'taxonomy/term') === 0) {
// do stuff
}
}
และ / หรือหากคุณต้องการให้มันรันเฉพาะบางหน้าเช่นหน้าแก้ไขโหนด:
function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
$current_path = explode("/", current_path() );
if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
// do stuff
}
}