วิธีรับพา ธ ไปยังโหนดที่แปลแล้ว?


10

ฉันได้ตั้งค่าเว็บไซต์หลายภาษาใน Drupal 7 ในเทมเพลตฉันต้องเพิ่มลิงค์ไปยังโหนดเนื้อหาที่เฉพาะเจาะจง โหนดนี้มีการแปลและชื่อแทนพา ธ ดังนี้:

node/42 = pathalias_de (german version)
node/43 = pathalias_en (english version)

ในเทมเพลตฉันต้องการโทรurl()เพื่อรับลิงก์ไปยังโหนดเนื้อหาที่เป็นนามแฝงในภาษาปัจจุบัน

ในหน้าเยอรมันมันควรเชื่อมโยงไปยัง/de/pathalias_deในหน้าภาษาอังกฤษ/en/pathalias_en

ฉันได้พยายามหลายรูปแบบเช่นการเรียก nid url()เรียกนามแฝงผ่านวัตถุภาษาปัจจุบัน

นี่คือสิ่งที่url()ควรจะทำหรือฉันต้องการฟังก์ชั่นที่แตกต่างกันหรือไม่? ขอบคุณ!

คำตอบ:


14

หลังจากดูแหล่งที่มาของโมดูล "การแปลเนื้อหา" ฉันได้คิดวิธีแก้ปัญหานี้:

    global $language;
    $translations = translation_path_get_translations("node/42");
    /*
    Returns the paths of all translations of a node, based on its Drupal path:
    array(2) {
        ["de"]=>string(7) "node/42"
        ["en"]=>string(7) "node/43"
    }
    */
    print l(t('Link Title'), $translations[$language->language]); //l() will return the alias to node/42

การทำเช่นนี้จะลิงก์ไปยังนามแฝงของโหนดที่ถูกต้อง ใช้งานได้และไม่ซับซ้อนจนเกินไป - ยังสงสัยว่ามีฟังก์ชั่นที่ใช้งานได้หรือไม่


2
หรือใช้$translations = translation_path_get_translations(drupal_get_normal_path("pathalias_de","de"));เพื่อค้นหานามแฝงแทน node id มันยืดหยุ่นมากกว่า คุณต้องผ่านภาษาที่ถูกต้องว่า
Dooderoo

5
global $language;

$translation_node = translation_path_get_translations("42");

$nid = $translation_node[$language->language]->nid;

$path = "node/{$nid}";

2
ยินดีต้อนรับสู่ Drupal Answers! แม้ว่าสิ่งนี้อาจตอบคำถามในทางทฤษฎี แต่ก็ควรที่จะรวมคำอธิบายที่สำคัญพร้อมกับรหัสของคุณ
Mołot

4

ดูที่drupal_get_path_alias fuction

รับเส้นทาง Drupal ภายในส่งคืนนามแฝงที่กำหนดโดยผู้ดูแลระบบ

หากไม่มีการระบุพา ธ ฟังก์ชันจะส่งคืนนามแฝงของหน้าปัจจุบัน

พารามิเตอร์

$ path: เส้นทาง Drupal ภายใน

$ path_language: รหัสภาษาเพิ่มเติมเพื่อค้นหาเส้นทาง

ในขณะที่คุณสามารถใช้พารามิเตอร์ path_language ดังนั้นคุณสามารถหาภาษาปัจจุบันแล้วส่งต่อไปยังฟังก์ชันนี้

หรือเพียงใช้โมดูล Multilink

  1. ออกแบบมาสำหรับเว็บไซต์หลายภาษา โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับเว็บไซต์ที่ไม่มีเนื้อหาทั้งหมดในทุกภาษาหรืออาจมีให้บริการ (แปล) ในภายหลัง
  2. ช่วยให้คุณสร้างลิงก์ในเนื้อหาไปยังโหนดอื่น ๆ ได้อย่างง่ายดายและลิงก์เหล่านั้นจะอัปเดตโดยอัตโนมัติเพื่อชี้ไปยังโหนดที่อ้างอิงที่แปลแล้วที่เหมาะสมเมื่อพร้อมใช้งาน

1
drupal_get_path_alias()จะไม่ค้นหาการแปลของโหนดที่ระบุเพียงค้นหาชื่อแทนในภาษาที่กำหนด ฉันพบวิธีแก้ปัญหาอื่นดูคำตอบของฉันด้านล่าง
Dooderoo

3

ดูเหมือนว่าคำตอบข้างต้นไม่ได้ใช้ i18n_path อย่างถูกต้อง หากคุณต้องการเชื่อมโยงไปยังโหนดที่แปลแล้วคุณควรเปิดใช้งานโมดูล i18n_path และจัดรูปแบบพา ธ ดังกล่าว

drupal_get_path_alias('node/'.$node->nid, $node->language);

2

คุณอาจจะใช้ฟังก์ชั่นการเชื่อมโยง ช่วยให้คุณสามารถส่งผ่านภาษาเป็นพารามิเตอร์และเป็นฟังก์ชันที่เหมาะสมในการสร้างลิงก์ด้วย Drupal


l()ใช้url()ภายในจึงไม่สำคัญในกรณีนี้
Dooderoo

1

การใช้การเปลี่ยนเส้นทางการแปลคุณสามารถเชื่อมโยงไปยังโหนดด้วยคำนำหน้าภาษา

นี่คือสิ่งที่มันบอกว่า:

โมดูลการเปลี่ยนเส้นทางการแปลจะเปลี่ยนเส้นทางผู้ใช้ที่ไม่ระบุชื่อ (รวมถึงโปรแกรมรวบรวมข้อมูลเว็บ) ไปยังการแปลของหน้าเว็บในภาษาที่ร้องขอหากมีอยู่โดยใช้รหัสการเปลี่ยนเส้นทาง 301 ตัวอย่างเช่นหากคำขอสำหรับ / de / node / 23 และ node / 23 ตรงกับหน้าภาษาอังกฤษผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังการแปลภาษาเยอรมันของโหนดภาษาอังกฤษหากมีอยู่ หากการแปลไม่มีอยู่เนื้อหาโหนดต้นทางจะปรากฏขึ้น

ตัวอย่างเช่นถ้า nid 22 สำหรับเวอร์ชันภาษาอังกฤษและมีภาษาฝรั่งเศสและเยอรมันคุณสามารถลิงก์ไปยังพวกเขาเป็น fr / node / 22 และ de / node / 22 22 ฉบับนี้อาจเป็นเวอร์ชั่นที่แปลแล้วก็ได้

หากไม่พบการแปลเฉพาะหากคุณไม่ได้เพิ่มภาษาญี่ปุ่น ja / node / 22 จะให้ 404 สำหรับผู้ใช้ที่ไม่ระบุตัวตน


0

เพื่อให้ได้คำนำหน้าเส้นทางที่ถูกต้องฉันใช้:

$node_url = url(drupal_get_path_alias('node/' . $row->nid));

drupal_get_path_alias () ส่งคืนนามแฝงเท่านั้น url () คืออันที่เพิ่มคำนำหน้า ("en /")

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