สร้างนามแฝงเส้นทางโดยทางโปรแกรมเมื่อมีการสร้างโหนด


8

ฉันมีประเภทเนื้อหาที่กำหนดเองที่สร้างขึ้นโดยโมดูล มีเบ็ดฉันสามารถใช้เพื่อตั้งค่านามแฝงเส้นทางของประเภทเนื้อหาที่กำหนดเองของฉันเมื่อมีการสร้างโหนด?

หนึ่งในเขตข้อมูลของฉันคือรหัสตัวเลขและฉันต้องการใช้ในเส้นทาง เช่น: 'event / myc0d3'

ฉันสังเกตเห็นว่าฟังก์ชันนี้ ( path_set_alias ) มีอยู่ใน 6 แต่ฉันไม่สามารถหาค่าที่เทียบเท่าได้สำหรับ 7 และไม่ทราบว่าฉันจะเรียกมันว่าที่ไหน

คำตอบ:


10

แทนที่จะใช้ hook โมดูลPathautoควรใช้ซึ่งคุณสามารถกำหนดรูปแบบเฉพาะวิธีสร้างนามแฝงต่อประเภทเนื้อหา (ที่/admin/config/search/path/patterns) ในนั้นคุณสามารถใช้รูปแบบการเปลี่ยนหรือรหัสของคุณเอง มันเป็นวิธีที่สะอาดกว่ามาก

มิฉะนั้นคุณสามารถลองhook_node_presave($node)และเปลี่ยนนามแฝงได้โดยตรง:

$node->path['pathauto'] = 0; // Required only if Pathauto is enabled.
$node->path['alias'] = "foo/bar";

หรือใช้path_save(&$path)ฟังก์ชั่นโดยตรงดังต่อไปนี้:

$path = array('source' => "node/$node->nid", 'alias' => 'foo/bar');
path_save($path);

สำหรับฉันทั้งสองทำงานร่วมกันเท่านั้นเพื่อที่ว่าในท้ายที่สุดภายในฟิลด์ข้อความแทนสมนามจะถูกเขียนขึ้น การทำเฉพาะ path_save () ทำงาน แต่จากนั้นฉันมีนามแฝงที่ไม่ถูกต้องในฟิลด์ข้อความนามแฝงในการแก้ไขโหนดดังนั้นการบันทึกใหม่แบบง่ายจะทำให้ฉันได้นามแฝงที่ไม่ถูกต้องอีกครั้ง
leymannx

9

ตอนนี้ฟังก์ชั่นนี้เรียกว่าpath_save ()ดูที่path_taxonomy_term_insert ()สำหรับตัวอย่าง


4
คุณควรขยายคำตอบนี้ไม่เพียง แต่ลิงก์ไปยังแหล่งข้อมูลภายนอกเท่านั้น แต่การเชื่อมโยงที่ถูกต้องมีประโยชน์
DrCord

9

hook_node_insert ()ไม่ทำงานในกรณีของฉันและด้วยการค้นหาบางอย่างฉันจึงเกิดขึ้นกับโพสต์บล็อกนี้ ฉันใช้hook_insert ()ในลักษณะเดียวกันและ presto

/**
 * Implements hook_insert().
 */
function mymodule_insert($node) {
    // Set the URL alias
    if (empty($node->path['alias'])) {
        $node->path['alias'] = 'slug/' . $node->nid;
    }
}

2
หากต้องการแจ้งให้ทราบว่าhook_insert()จะใช้เฉพาะเมื่อโมดูลที่ใช้มันกำลังกำหนดประเภทเนื้อหา; ไม่สามารถใช้ hook เพื่อดำเนินการกับโหนดสำหรับประเภทเนื้อหาที่กำหนดจากโมดูลอื่น
kiamlaluno

นี่คือเหตุผลที่ไม่แนะนำให้เชื่อมโยงไปยังบทความเท่านั้น แต่เพื่อขยายคำตอบแทนและดึงข้อมูลที่เป็นประโยชน์หลักจากบทความเหล่านั้น - ลิงก์ 'โพสต์บล็อก' ไม่ถูกต้องอีกต่อไปและผลลัพธ์ใน 404
Titi

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