วิธีที่สะอาดในการสร้างเบราว์เซอร์ taxonomy แบบง่ายที่มีความลึกไม่ จำกัด


23

ฉันใช้เวลาหลายวันพยายามหาวิธีที่สะอาดในการทำสิ่งต่อไปนี้:

  1. แสดงรายการคำศัพท์ระดับสูงทั้งหมดในคำศัพท์พร้อมลิงก์ไปยังคำศัพท์สำหรับเด็ก
  2. เมื่อคลิกลิงก์จะถูกนำไปยังรายการลูกของคำเหล่านั้น
  3. โฆษณาไม่มีกำหนดจนกว่าจะถึงคำที่อยู่ในระดับต่ำสุดซึ่งรายการโหนดที่ติดแท็กด้วยคำนั้นจะปรากฏขึ้น

ดูเหมือนว่ามันจะเป็นฟังก์ชั่นที่ใช้กันทั่วไป แต่ฉันไม่สามารถหาวิธีแก้ปัญหาใด ๆ ที่สามารถจัดการกับความลึกตามอำเภอใจได้

โซลูชันที่เหมาะสมที่สุดคือโซลูชันที่ใช้ Views 3, Contexts, EntityFieldQueries หรือสิ่งอื่น ๆ ที่ได้รับการสนับสนุนเป็นอย่างดีใน Drupal 7

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

คำตอบ:


23

ฉันหาวิธีที่จะทำสิ่งนี้ได้ด้วยโมดูล Views เท่านั้น มันไม่สมบูรณ์แบบ - มันไม่ได้สร้าง URL ที่ดีและเส้นทางคดเคี้ยวกับสายเลือดอนุกรมวิธานวิธีการแก้ปัญหาของฉันสำหรับอนุกรมวิธานระดับความลึกเดียวจะทำ

เบราว์เซอร์ความลึกคงที่

สำหรับอนุกรมวิธานของความลึกแบบคงที่ (ซึ่งคำทั้งหมดมีความลึกของคำศัพท์ลูกเดียวกัน) คุณจะทำสิ่งต่อไปนี้:

  1. สร้างมุมมองของโหนด
  2. เพิ่มความสัมพันธ์กับเทอมอนุกรมวิธาน (เงื่อนไข)
  3. เพิ่มความสัมพันธ์กับผู้ปกครองคำ taxonomy สามารถเข้าถึงได้ผ่านทางคำศัพท์ (ผู้ปกครอง)
  4. เพิ่มความสัมพันธ์กับผู้ปกครองคำอนุกรมวิธานสามารถเข้าถึงได้ผ่านผู้ปกครอง (ผู้ปกครองผู้ปกครอง)
  5. ทำซ้ำขั้นตอนที่ 4 หลาย ๆ ครั้งเท่าที่จำเป็นสำหรับความลึกของอนุกรมวิธานของคุณ
  6. เพิ่มตัวกรองตามบริบทสำหรับแต่ละรายการและตรวจสอบให้แน่ใจว่าอยู่ในลำดับที่ถูกต้อง ตั้งค่าให้แสดงข้อมูลสรุปเมื่อตัวกรองไม่ได้อยู่ใน URL
  7. คุณอาจต้องการแทนที่ breadcrumb และหัวเรื่องสำหรับแต่ละตัวกรอง
  8. ???
  9. กำไร

เบราว์เซอร์ความลึกที่เปลี่ยนแปลงได้

สำหรับอนุกรมวิธานของความลึกแปรผัน (ซึ่งบางคำต้นไม้มีการทำรังในระดับลึกกว่าที่อื่น ๆ ) มันซับซ้อนกว่าเล็กน้อย:

  1. เพิ่มคำศัพท์ระดับสูง (Foo) ใหม่ลงในคำศัพท์ของคุณและใส่คำศัพท์อื่น ๆ ลงไป
  2. สร้างมุมมองของคำศัพท์ด้วยเพจที่แสดงชื่อคำศัพท์
  3. เพิ่มตัวกรองเชิงบริบท: คำศัพท์อนุกรมวิธาน: คำหลัก
  4. เมื่อค่าเริ่มต้นไม่ได้อยู่ใน URL ให้ระบุค่าเริ่มต้น
  5. ตั้งค่าเริ่มต้นเป็นชื่อคำระดับบนสุดของคุณ (Foo)
  6. ระบุเกณฑ์การตรวจสอบ
    • เครื่องมือตรวจสอบความถูกต้อง: เทอมอนุกรมวิธาน
    • เกณฑ์: ชื่อคำศัพท์ของคุณ
    • ประเภทค่าตัวกรอง: ชื่อคำที่แปลงเป็นรหัสคำ
  7. คลิกปุ่ม "+ เพิ่ม" ที่ด้านบนของแผงมุมมองเพื่อเพิ่มไฟล์แนบไปยังมุมมอง
  8. เพิ่มลงในไฟล์แนบนี้เท่านั้น (แทนที่) ความสัมพันธ์: คำศัพท์ทางภาษี: เนื้อหาที่มีคำ
  9. เพิ่มในไฟล์แนบนี้เท่านั้น (แทนที่) แสดง: ฟิลด์: ชื่อโหนดที่เชื่อมโยงกับโหนดและลบ (จากไฟล์แนบนี้เท่านั้น!) แสดง: ฟิลด์: ชื่อคำ
  10. เพิ่มลงในไฟล์แนบนี้เท่านั้น (แทนที่) ตัวกรองเชิงบริบท: คำศัพท์อนุกรมวิธาน: ชื่อ
  11. เมื่อค่าตัวกรองไม่พร้อมใช้งานให้ระบุค่าเริ่มต้น: ค่าวัตถุดิบจาก URL: ส่วนประกอบเส้นทาง: 2 (หรือมากกว่านั้นหากเส้นทางหน้าของคุณมีองค์ประกอบ> 1)
  12. การตั้งค่าไฟล์แนบ: แนบไปกับ: [ชื่อของหน้าเว็บที่คุณแสดง]
  13. ???
  14. กำไร

ภาพหน้าจอของ UI ของ Views สำหรับการอ้างอิง: ป้อนคำอธิบายรูปภาพที่นี่


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

8
  1. สร้างมุมมองของประเภท Taxonomy
  2. เพิ่มตัวกรองเชิงบริบทของชนิดTaxonomy term: เทอมหลัก
  3. ตั้งค่าเริ่มต้นและเก็บไว้เป็นคงที่ ให้รหัส Term ของคำหลักชั้นนำ
  4. เพิ่มรหัสคำศัพท์อนุกรมวิธานเป็นฟิลด์และแยกออกจากการแสดงผล
  5. เพิ่มTaxonomy Term Nameคลิกที่ out ทำให้ฟิลด์นี้เป็นลิงก์ ให้ลิงก์เป็น "path-you-set-in-view / [tid]"
    หมายเหตุ:คุณควรยกเลิกการเลือก "เชื่อมโยงฟิลด์นี้ไปยังหน้าคำศัพท์อนุกรมวิธาน"

เมื่อคุณเยี่ยมชมหน้าดูคุณจะเห็นลูก ๆ ของผู้ปกครองชั้นนำ ตามตัวอย่างที่คุณจะได้รับ:

  • TERM1
  • TERM2

เมื่อคุณคลิกที่ term1 คุณจะได้รับเด็ก ๆ จนกว่าคุณจะไปถึง term1.1.1 คุณจะไม่ได้รับผลลัพธ์ใด ๆ หากคุณคลิกที่ term1.1.1 เพื่อให้บรรลุว่าเราจำเป็นต้องสร้างมุมมองเพิ่มเติมหนึ่งบล็อกในมุมมองด้านบน

  1. เพิ่มบล็อก
  2. ลบตัวกรองบริบทและฟิลด์ที่มีอยู่ออก
    หมายเหตุ:เมื่อคุณลบออกตรวจสอบให้แน่ใจว่าคุณได้เลือกหน้านี้ (Over Ride)จากดรอปดาวน์ที่ด้านบนถัดจากสำหรับฟิลด์อื่น ๆ ที่ชาญฉลาดฟิลด์และตัวกรองตามบริบทที่คุณสร้างขึ้น .
  3. เพิ่มตัวกรองเชิงบริบทใหม่คำศัพท์อนุกรมวิธาน: ID ของคำศัพท์
  4. เพิ่มความสัมพันธ์คำอนุกรมวิธาน: เนื้อหาที่มีคำ
  5. เพิ่มชื่อเนื้อหาและคุณใช้ความสัมพันธ์จากเมนูแบบเลื่อนลงที่ด้านบน
  6. บันทึกมุมมองและกลับไปที่เพจที่เราสร้าง (นี่เป็นสิ่งสำคัญอื่น ๆ ที่ฉลาดคุณจะไม่สามารถทำตามขั้นตอนต่อไปได้
  7. เพิ่มเขตข้อมูลในFOOTERหรือHEADER
  8. เลือก "ทั่วโลก: ดูพื้นที่" จากรายการและเลือกบล็อกที่เราสร้างจากมุมมองแบบเลื่อนลงเพื่อแทรกในขณะที่คุณอยู่ที่นั่นตรวจสอบตัวกรองตามบริบทที่รับมาเพื่อให้เราสามารถส่งค่าจากมุมมองนี้ไปยังบล็อกได้เช่นกัน
  9. ตรวจสอบการแสดงแม้ว่ามุมมองไม่มีผลลัพธ์ดังนั้นเมื่อมุมมองนี้ไม่แสดงผลลัพธ์บล็อกจะยังคงแสดง

บันทึกมุมมองและคุณทำเสร็จแล้ว


ฉันทำตามคำอธิบายที่ชัดเจนของ Mohammed Shameem ขอบคุณผลงานสมบูรณ์แบบ !!
Steven

3

ฉันคิดว่าสิ่งที่คุณต้องการคือViews Treeซึ่งเป็นโมดูล contrib ที่ใช้Viewsเพื่อสร้างโครงสร้างของ taxonomy

(ให้เวลาฉันสักวินาทีและฉันจะเขียนวิธีใช้อย่างรวดเร็วในการดูช่องข้อมูลภาษี)

เห็นได้ชัดว่าโมดูลมีปัญหาที่ทำให้ไม่สามารถทำงานกับข้อกำหนดด้านอนุกรมวิธานได้ หุยฮา

ที่กล่าวว่าฉันพบรหัสต่อไปนี้ซึ่งดูเหมือนว่าจะทำสิ่งที่คุณต้องการ (คุณสามารถทำให้มันแสดง / ซ่อนองค์ประกอบผ่านรหัส jQuery พื้นฐานสวย ๆ ):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

ผ่าน " รายการหมวดหมู่ซ้อนพร้อมลิงค์ไปยังหน้า "


ฉันได้เปิดใช้งานโมดูลนั้นแล้วลองทดสอบกับมันและฉันมีปัญหาสองอย่าง: 1. ฉันสงสัยว่ามันจะช่วยให้คุณมีรายชื่อแบบแบนไม่ใช่ประสบการณ์การท่องเว็บแบบหลายเพจและ 2 ฉันไม่สามารถทำงานได้ วิธีการจะเป็นประโยชน์มากที่สุด

อัปเดตคำตอบ ขออภัยเห็นได้ชัดว่าทรีทรีมีปัญหาแบบเปิดอีกครั้งโดยใช้คำศัพท์ทางอนุกรมวิธาน คำตอบอื่น ๆ ที่โพสต์
aendrew

ที่ปรากฏขึ้นเพื่อให้รายการซ้อนง่ายมากกว่าเบราว์เซอร์เพจจิ้งตามลำดับ

@beth - จะพอไหมถ้าฉันเขียน jQuery ที่แสดง / ซ่อนอิลิเมนต์ของรายการนั้นเมื่อคลิกไอเท็ม parent / child?
aendrew

ฉันไม่ต้องการให้เป็นจาวาสคริปต์

0

หากคุณต้องการมีชุดของหน้าที่เรียกดู taxonomy แบบไดนามิกฉันจะไปตามวิธีดังต่อไปนี้ต้องใช้โมดูลการแสดงผล 3 Views + Taxonomyซึ่งอนุญาตให้คุณใช้ Views เพื่อแสดงเนื้อหาของtaxonomy/term/%หน้าเว็บ:

  1. ข้อกำหนดระดับบนสุด - คำศัพท์ที่ผู้ปกครองเป็นโมฆะ
  2. ข้อตกลงระดับกลาง - คำศัพท์ที่ผู้ปกครองไม่เป็นโมฆะ ไม่มีผลลัพธ์: แสดงมุมมอง # 3
  3. โหนดพร้อมเงื่อนไข - โหนดรายการติดแท็กด้วยคำศัพท์

เนื่องจากมุมมองที่ 1 และ 2 อาจมีลักษณะคล้ายกันคุณอาจพิจารณารวมเข้าด้วยกันเป็นจอแสดงผลในมุมมองเดียวซึ่งจะสามารถจัดการได้ง่ายขึ้น

ฉันใช้วิธีการนั้นเพื่อการจัดกลุ่มของฉันได้สำเร็จ มันโชคดีที่เป็นเนื้อเดียวกันในแต่ละระดับ - สาขาที่กำหนดให้จบลงด้วยใบ (โหนด) หรือสาขา (เงื่อนไข) แต่ไม่ทั้งสอง หากนี่เป็นข้อ จำกัด โปรดทดสอบก่อน

แน่นอนว่านี่คือ "รหัสหลอก" คุณต้องการตั้งค่าการตรวจสอบความถูกต้องและตัวกรองรวมถึงรูปแบบพา ธ ที่น่าเชื่อถือและดูมีเหตุผลเพื่อสะท้อนโครงสร้าง

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