การแก้ไข URL ทั้งหมดเพื่อรวมข้อมูลเพิ่มเติม


8

มีตะขออะไรบ้างในการแก้ไข URL? ตัวอย่างเช่นมีโมดูลภาษาที่เมื่อเปิดใช้งานให้ URL ที่เช่นแทนที่จะปล่อยให้มันเป็น/en/node/1/node/1

ฉันต้องการมีสิ่งที่คล้ายกันใน url ที่ฉันสามารถเข้าถึงได้โดยไม่ต้องใช้ฟังก์ชั่นอื่น ๆ

สิ่งนี้สำเร็จได้อย่างไร

คำตอบ:


4

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