วิธีใช้ชื่อโหนดหรือนามแฝงพา ธ แทน node id ในตัวกรองบริบทอ้างอิงโหนดในมุมมอง?


7

ฉันมีโหนด A พร้อมการอ้างอิงถึงโหนด B

ในมุมมองฉันแสดงโหนดทั้งหมด A ที่มีการอ้างอิงโหนด B เฉพาะ (nid: 123, title: node-B-title)

แทนที่จะใช้ nid ในตัวกรองเชิงบริบทฉันต้องการใช้ชื่อโหนด ตัวอย่างเช่นแทนที่จะเป็น:

view-name/123

ฉันต้องการใช้

view-name/node-B-title

ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


10

ฉันมีปัญหาที่คล้ายกันมากและไม่เพียง แต่หาวิธีแก้ปัญหา แต่ยังได้เรียนรู้สิ่งใหม่เกี่ยวกับวิธีการทำงานของมุมมอง ให้ฉันแบ่งปันสิ่งที่ฉันเรียนรู้และวิธีแก้ปัญหาของคุณด้วย

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

  1. การเลือกค่าตัวกรองบริบทจาก URL
    • โดยทั่วไปแล้วคุณจะมีการดูหน้าเว็บเพื่อวัตถุประสงค์ดังกล่าวที่มี URL ของฟอร์มfoo/%/barหรือfoo/bar/%สำหรับตัวกรองเชิงบริบทเดียวหรือของฟอร์มfoo/%/bar/%หรือfoo/bar/%/%สำหรับตัวกรองหลายตัว
    • ในกรณีที่คุณมีตัวกรองหลายตัวค่า url ที่ปรากฏขึ้นก่อนจะถูกแมปกับตัวกรองตัวแรกถัดจากตัวกรองตัวที่สองเป็นต้น
  2. ชมช่วยให้คุณสามารถที่จะบอกว่าจะทำอย่างไรถ้าค่าตัวกรองจะไม่สามารถใช้ได้ใน URL นี้มักจะใช้สำหรับมุมมองบล็อก
    • คุณสามารถเลือกจากการกระทำต่าง ๆ แล้วกำหนดค่าตัวเลือกได้เช่นกัน คุณสามารถเลือกจากการกระทำต่าง ๆ แล้วกำหนดค่าตัวเลือกได้เช่นกัน asdfj kajsdf
  3. อีกมุมมองหนึ่งช่วยให้คุณสามารถบอกได้ว่าจะทำอย่างไรกับค่าตัวกรองหากพบใน URLตามที่อธิบายไว้ใน # 1 ด้านบน กรณีการใช้งานทั่วไปคือ - สร้างชื่อแบบไดนามิกโดยยึดตามค่าตัวกรอง, การตรวจสอบค่าตัวกรอง ฯลฯ
    • เมื่อตรวจสอบค่าตัวกรองคุณสามารถเปลี่ยนค่าได้เช่นกัน! (นั่นคือที่แก้ปัญหาของเราอยู่ btw) นี่คล้ายกับวิธีที่เราสามารถเปลี่ยนค่า $ form ในการตรวจสอบความถูกต้องของแบบฟอร์ม drupal ป้อนคำอธิบายรูปภาพที่นี่

วิธีแก้ไขปัญหาเฉพาะของคุณนั้นคือการใช้รหัสที่คล้ายกันมากในส่วนที่ชี้โดยลูกศรในภาพด้านบน

ลิงค์นี้ พิสูจน์แล้วว่าเป็นความช่วยเหลือที่ดีสำหรับฉัน นี่คือข้อความที่ตัดตอนมาจากมัน:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

สิ่งนี้ไม่ได้ผลสำหรับฉัน แต่ทำให้เกิดข้อผิดพลาด ajax ในมุมมองเมื่อบันทึก
DrCord

1

สิ่งนี้จะไม่ทำงานในทุกสถานการณ์ แต่วิธีหนึ่งในการแก้ปัญหาในคำถามคือใช้การแสดงผลโหนดจริงของโหนด B (หรือโหนดประเภท B) และตั้งค่าพา ธ ของวิธีที่คุณต้องการด้วยโมดูลพา ธ หรือพาธauto จากนั้นใช้มุมมองบล็อกเพื่อเพิ่มความสัมพันธ์ของเนื้อหาและมุมมองที่คุณต้องการ

ใช้ตัวกรองตามบริบทใน NID Provide default value > Content ID from URLและตั้งค่าแล้ว จากนั้นเพิ่มบล็อกการดูในหน้าของคุณหรือชุดของหน้า

หากบริบทของคุณอนุญาตให้คุณใช้บล็อกมุมมองบนโหนดเองและไม่ใช่เพจมุมมองสิ่งนี้จะทำให้ง่ายขึ้นมากในการรับพา ธ ที่คุณต้องการและมุมมองจะแสดงตามที่คุณต้องการ


1

ฉันแก้ไขคำตอบที่ยอมรับแล้ว แต่ต้องการเพิ่มรหัสจริงที่นี่:

ใช้ตัวเลือกการตรวจสอบความถูกต้อง PHP ภายใต้ตัวเลือกการตรวจสอบความถูกต้องในตัวกรองเชิงบริบท

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

อาร์กิวเมนต์ view ต้องเป็นการอ้างอิงฟิลด์ของประเภทเนื้อหาจากนั้นเลือกตัวเลือก "ระบุอาร์กิวเมนต์เริ่มต้น" และตรวจสอบตัวเลือก Id Node (บางอย่างเช่นนั้น)

1) เพิ่มอาร์กิวเมนต์ "อ้างอิงฟิลด์ X" 2) ตรวจสอบโหนด ID จาก url (ในการเพิ่มอาร์กิวเมนต์เริ่มต้น) 3) ในส่วนการตรวจสอบตรวจสอบประเภทเนื้อหาของโหนดและใน setion "ประเภทโหนด" เลือก "รหัสโหนด

และเป็นที่เรียบร้อย :)


"content ID จาก URL" จะให้หมายเลขเท่านั้น หากฉันจะใช้การอ้างอิงคำว่าฉันสามารถใช้ "เกณฑ์การตรวจสอบ" กับ "ชื่อคำที่แปลงเป็นรหัสประจำตัว" สำหรับการอ้างอิงโหนดไม่มีตัวเลือกที่คล้ายกันในการแปลชื่อเป็น nid อาจเป็นเพราะชื่อไม่จำเป็นต้องซ้ำกัน
Uwe

ใช่ถูกต้อง แต่จำเป็นอาร์กิวเมนต์จะต้องมีการอ้างอิงฟิลด์ (nid) ลองที่
Eleo

1) เพิ่มอาร์กิวเมนต์ "การอ้างอิงฟิลด์ X" 2) ตรวจสอบโหนด ID จาก url (ในการเพิ่มอาร์กิวเมนต์เริ่มต้น) 3) ในส่วนการตรวจสอบตรวจสอบประเภทเนื้อหาของโหนดและในการตั้งค่า "ประเภทโหนด" เลือก "รหัสโหนด"
Eleo

URL ที่แท้จริงสามารถมี nid และนามแฝงของเส้นทางอาจเป็นชื่อโหนด มันใช้งานไม่ได้เหรอ?
SGhosh

0

คำถามเก่า แต่พบผ่านทาง Google และคิดว่าฉันจะแบ่งปันวิธีแก้ปัญหาให้กับคนอื่น ๆ ที่พบมันในอนาคต:

ขณะนี้มีโมดูลชื่อsafeword ซึ่งโดยทั่วไปแล้วทำสิ่งที่ Sumeet Pareek แนะนำ: (โดยอัตโนมัติ) สร้างเขตข้อมูล URL ที่เป็นมิตร


0

ฉันอยากจะแนะนำขยายเส้นทางนามแฝง (path_alias_xt) โมดูล มันแก้ไขปัญหานี้ได้อย่างหมดจดโดยการติดตั้งโดยไม่มีการกำหนดค่ามันเป็นเรื่องมหัศจรรย์โดยทั่วไป : D ไม่ได้จริงๆ แต่ข้อความที่ตัดตอนมาจากหน้าโมดูลแสดงวิธีที่คุณเพิ่งติดตั้งและแก้ไขปัญหานี้และปัญหาอื่น ๆ แต่ไม่ได้ไปว่าโมดูลทำหน้าที่อย่างไรเบื้องหลัง: ... เราก็ทำได้เสมอ อ่านรหัส: D มันไม่ได้กล่าวถึงเฉพาะการแก้ไขเส้นทางมุมมอง แต่ฉันได้ใช้มันเพื่อให้มันทำงานได้อย่างสมบูรณ์

รายการปัญหาที่แก้ไขได้จากหน้าโมดูล:

  • คุณเคยสงสัยไหมว่าทำไมหลังจากกำหนดนามแฝงอย่างเกี่ยวกับเราเพื่อบอกโหนด / 123 หน้าเว็บของคุณยังคงเต็มไปด้วยแท็บและลิงก์ที่สร้างด้วยเครื่องจักรที่น่าเกลียดเช่น / โหนด / 123 / แก้ไขโหนด / 123 / การแก้ไข ฯลฯ .?
  • เช่นเดียวกันสำหรับลิงก์ / taxonomy / term /% และ / user /%: คุณคาดหวังว่าจะเห็น / แห้ง / ติดตาม แต่มี / user / 5 / track หรือไม่
  • คุณพบว่าแถบที่อยู่เบราว์เซอร์ของคุณยังแสดงตัวเลขที่น่าเกลียดเหล่านั้นแทนที่จะเป็นชื่อแทนของคุณหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.