ตัวกรองเชิงบริบทของ Views ทำงานอย่างไร


9

ฉันพยายามพาดหัวตัวกรองบริบทอีกครั้ง! ฉันใช้มันไปซักพักแล้ว แต่ฉันก็รู้สึกตันอีกครั้ง นี่คือสิ่งที่ฉันพยายามทำ:

  1. สร้างเพจโหนดเนื้อหาที่โคลนด้วยคำศัพท์อนุกรมวิธานที่แทรกอยู่ในเพจที่โคลนนี้

เช่น: EXAMPLE.com/white-shoes/blue

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

ในมุมมองฉันจะต้องสร้างการแสดงผลหน้าด้วยเส้นทางของ:% /%

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

$ x = drupal_lookup_path ('source', arg (0));

$ y = ระเบิด ('/', $ x);

ส่งคืน $ y 1 ;

โค้ด PHP นั้นจะแปลงส่วน / white-shoes ของ URL ให้เป็น NID แต่มันใช้งานไม่ได้ ฉันทดสอบโค้ดผ่านdrush evผ่านทางเทอร์มินัลและฉันได้รับผลตอบแทนที่แน่นอนดังนั้นฉันจึงรู้ว่ามันใช้งานได้

ฉันทำเช่นเดียวกันกับชื่อคำศัพท์อนุกรมวิธานและเพิ่มตัวกรองเชิงบริบทสำหรับสิ่งนั้นด้วย เวลานี้ฉันเลือกให้ค่าเริ่มต้นและเลือกRAW VALUE จาก URLและเลือกอาร์กิวเมนต์ที่สอง

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นเมื่อฉันป้อนค่า PREVIEW สำหรับตัวกรองเชิงบริบท: AAA / BBB / CCC ค่าเริ่มต้นของฉันถูกละเว้น มันควรจะคว้าข้อโต้แย้งที่ 2 แต่ได้รับเพียงครั้งแรกเท่านั้น ดูคำสั่ง SQL ที่คุณจะเห็นว่ามันได้รับ AAA เมื่อมันควรจะเป็น BBB

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นคำถามคือสิ่งที่ฉันทำผิดหรือมีทางออกที่ดีกว่าสิ่งที่ฉันต้องการที่จะบรรลุ?


ฟังดูงี่เง่า แต่คุณช่วยให้รายละเอียดเพิ่มเติมหน่อยได้ไหม? ฉันมีเวลาซักนิดที่จะเข้าใจว่าคุณกำลังพยายามอะไรมากขึ้นเกี่ยวกับวิธีที่คุณพยายามทำ แทนที่จะใช้ค่า Raw หรือระบุค่าเริ่มต้นให้ใช้ Content ID จาก URL ที่จะให้ NID
kyletaylored

สวัสดี, ไม่มี Content ID ตั้งแต่คุณเชื่อมโยงไปถึง url: / white-shoes / blue .... the / blue url ไม่มีอยู่ตามที่แสดงโดยมุมมอง ดังนั้นจึงไม่มี ID เนื้อหาที่จะคว้า ... ต้องแยกอาร์กิวเมนต์แรกของ url แล้วแปลง url นั้นเป็นเส้นทาง NID
Patoshi パトシ

คำตอบ:


2

ต่อไปนี้เป็นวิดีโอและบทความที่เกี่ยวข้องที่จะอธิบายวิธีการใช้ตัวอย่างเช่นใช้ Pets (Dogs, Cats) ซึ่งอาจเป็นตัวอย่างที่ง่ายพอที่จะช่วยให้เข้าใจวิธีใช้ตัวกรองบริบทของ Views

วิดีโอ: https://www.youtube.com/watch?v=lJFMTDuaxy8 (URL วิดีโอ YouTube แบบสั้น: lJFMTDuaxy8)

บทความ: http://www.metaltoad.com/blog/using-drupal-contextual-filters-views


5

Contextual Filter ใช้สำหรับกรองผลลัพธ์ของมุมมองโดยใช้อาร์กิวเมนต์ URL และคุณสามารถส่งอาร์กิวเมนต์ด้วยตนเองในรูปแบบนี้:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

โดยที่ "$ name" เป็นชื่อมุมมองของคุณ (เช่น 'example_view') และ '$ display_id' เป็นประเภทการแสดงผลของมุมมองของคุณ (เช่น 'default') และ "$ arg1, $ arg2, $ arg3" เป็นอาร์กิวเมนต์ เหมือนใน URL

อาร์กิวเมนต์ URL มีโครงสร้างต่อไปนี้:

http://example.com/arg_1/arg_2/arg_3 (arg_2 มีองค์ประกอบพา ธ 2 (ในหน้าการตั้งค่ามุมมอง)

เมื่อค่าตัวกรองไม่เป็นประโยชน์:

หมายความว่า drupal ไม่พบตัวกรองใด ๆ

ระบุค่าเริ่มต้น:

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

เมื่อค่าตัวกรองที่มีอยู่

ในกรณีนี้คุณทำการตรวจสอบตามความต้องการของคุณและตัวเลือกอื่น ๆ เมื่อ drupal สามารถหาค่าตัวกรอง


รับฟังก์ชั่น views_embed_view () ฉันจะโหลดสิ่งนั้นลงในเส้นทางย่อยของ / white-shoes / blue ได้อย่างไร โปรดทราบว่า / สีน้ำเงินไม่มีอยู่ตามที่สร้างโดยมุมมอง เมื่อผู้ใช้ไปถึง / สีน้ำเงินเส้นทางมันควรแยกอาร์กิวเมนต์แรกและดึง NID ของนามแฝงนั้นแล้วโหลดเนื้อหา ปัญหาของตัวกรองเชิงบริบทคือไม่มีวิธีใดที่จะให้ค่า PHP สำหรับเมื่อค่าตัวกรองนั้นพร้อมใช้งาน
Patoshi パトシ

@duckx มีตัวเลือกที่ดีเยี่ยมเพื่อให้คุ้มค่า PHP เมื่อกรองที่มีอยู่คือ VALIDATION (type: PHP Code)- ด้วยตัวเลือกนี้คุณสามารถใช้มุมมองวัตถุและทำทุกสิ่งที่คุณต้องการ ใน/blueพา ธเคสของคุณที่สร้างโดยมุมมองจะถูกใช้เพื่อดึงข้อมูลโหนด id ของนามแฝงนั้นเช่นกัน
Jack-PL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.