ฉันจะแสดง 3 โพสต์ล่าสุดสำหรับแต่ละคำในมุมมองได้อย่างไร


13

ด้วยความช่วยเหลือของคำถามอื่น: แสดงโหนดใหม่ล่าสุดสำหรับแต่ละคำศัพท์อนุกรมวิธานในการดูฉันสามารถสร้างมุมมองที่ฉันต้องการยกเว้นว่ามันจะแสดงโพสต์ทั้งหมดสำหรับแต่ละคำ (จัดกลุ่มตามคำ)? ฉันจะ จำกัด แต่ละคำให้แสดงเฉพาะ 3 โพสต์ล่าสุดได้อย่างไร

เช่น

ภาคเรียนที่ 1
- โพสต์ 1
- โพสต์ 2
- โพสต์ 3

ภาคเรียนที่ 2
- โพสต์ 1
- โพสต์ 2
- โพสต์ 3

ภาคเรียนที่ 3
- โพสต์ 1
- โพสต์ 2
- โพสต์ 3

คำตอบ:


9

หากคุณต้องการเพียงหนึ่งโหนดคุณสามารถใช้ความสัมพันธ์“ โหนดแทน” แต่ถ้าคุณต้องการสามโหนดละระยะการใช้งานบางอย่างเช่นชมสนามดู

1) สร้างมุมมอง "เด็ก" สำหรับเนื้อหา บางสิ่งเช่นนี้ ป้อนคำอธิบายรูปภาพที่นี่

เพิ่มอาร์กิวเมนต์เทอมอนุกรมวิธานข้อ จำกัด ของเพจเจอร์การเรียงลำดับและอื่น ๆ : ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณสามารถแนบมุมมองนี้กับมุมมองอื่น

2) สร้างมุมมอง taxonomy: ป้อนคำอธิบายรูปภาพที่นี่

เพิ่มช่อง ID ที่ซ่อนอยู่จากนั้นเพิ่มช่อง“ ทั่วโลก: มุมมอง”: ป้อนคำอธิบายรูปภาพที่นี่

อย่าลืมกำหนดค่าแคช จากหน้ามุมมองฟิลด์มุมมอง :

แนะนำอย่างยิ่งให้ใช้โมดูลนี้ร่วมกับการดูแคช การดูแคชเนื้อหาและการดำเนินการแคชเป็นวิธีที่ดีในการดูแคช


ขอบคุณ Kalabro วิธีการของคุณถูกต้องเช่นกัน เดิมทีฉันกำลังจะไปในเส้นทางนี้ แต่ต้องการดูว่ามีวิธีที่ดีกว่าการสร้างมุมมองมากมายหรือไม่จากนั้นจึงฝังมุมมองหลังจากดูแล้ว
Nigel Waters

2
นั่นไม่ใช่ตัน @NigelWaters นั่นเป็นเพียงสอง: หนึ่งสำหรับโหนดและหนึ่งสำหรับแง่ โซลูชันนี้ค่อนข้างเสถียรและฉันใช้สำหรับรายการมุมมองที่ไม่ได้มาตรฐาน
kalabro

ความเข้าใจผิดของฉัน ฉันคิดว่าฉันต้องการสร้างมุมมองสำหรับแต่ละกลุ่ม
ไนเจลวอเตอร์ส

นี่เกือบจะสมบูรณ์แบบสำหรับกรณีการใช้งานของฉัน ปัญหาเดียวของฉันคือลิงก์ "เพิ่มเติม" สำหรับมุมมองเด็กลิงก์ไปยังมุมมองเดียวกันและยังคงแสดงองค์ประกอบจำนวน จำกัด เท่านั้น! หัวเรื่องจากลิงก์มุมมองพาเรนต์ไปยัง taxonomy ซึ่งทำงานได้ตามต้องการ
ทำเครื่องหมาย

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

7

เมื่อทำการตรวจสอบเพิ่มเติมดูเหมือนว่าPeek Summaryอาจเป็นสิ่งที่คุณต้องการ ภาพหน้าจอในเอกสารประกอบสำหรับ Drupal 6 และมันแตกต่างกันเล็กน้อยใน Drupal 7 ดังนั้นฉันจึงแนบภาพหน้าจอที่อัปเดตแล้ว

  • เลือก Peek Summary จาก 'ตัวกรองตามบริบท'> 'เมื่อค่าตัวกรองไม่ได้อยู่ใน URL'> 'แสดงสรุป'> 'รูปแบบ'

เลือก Peek Summary จาก 'ตัวกรองตามบริบท'> 'เมื่อค่าตัวกรองไม่ได้อยู่ใน URL'> 'แสดงสรุป'> 'รูปแบบ'

  • คุณจะเห็นมุมมองของมุมมองย่อย คลิกที่เฟืองถัดจากเพจเจอร์สำหรับกลุ่มที่คุณต้องการ จำกัด

คลิกที่ไอคอนการตั้งค่าเพจเจอร์

  • ป้อนรายการสูงสุดที่จะแสดงบนตัวเลือกเพจเจอร์

ฟิลด์แรกภายใต้ตัวเลือกของเพจเจอร์

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

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


ดูเหมือนว่าเพจเจอร์ไม่สามารถเขียนทับได้ในแต่ละกลุ่ม การกดปุ่มแก้ไขบนเพจเจอร์ในกลุ่มจะดึงการตั้งค่าเพจเจอร์หลักขึ้น ถ้าฉันไม่มีของหาย?
ไนเจลวอเตอร์ส

อ่าใช่คุณ นั่นมันสมบูรณ์แบบแล้ว คุณจะสามารถ จำกัด ทั้งหมดได้ในครั้งเดียว

น่าเสียดายนั่นหมายความว่าเพจเจอร์มีผลต่อจำนวนกลุ่มที่แสดงเช่นกัน ฉันคิดว่าโพสต์ดั้งเดิมของฉันทำให้เข้าใจผิดเนื่องจากตัวอย่างแสดงเพียงสามคำที่มีการโพสต์สามรายการ ฉันต้องการแสดง 10 คำขึ้นไปโดยมี 3 โพสต์ต่อเทอมในหน้าเดียว ใกล้ :(
Nigel Waters

ฉันผิดเกี่ยวกับ "แทนที่รายการที่จะแสดง" ไม่ทำอะไรเลย ใช้เพื่อระบุจำนวนกลุ่มที่จะแสดง การป้อน '0' จะให้กลุ่มไม่มีที่สิ้นสุด

2

วิธีที่จะ จำกัด สิ่งนี้ในรหัสคือการเพิ่มสิ่งต่อไปนี้ในโมดูลที่กำหนดเอง:

function custom_views_pre_render(&$view) {
  //get the rows from the view just before render
  $results = $view->result;
  //create a counter
  $count = '';
  //we're going to built up a new $result array
  $new_results = array();
  //iterate through each view row
  foreach($results as $result) {
    //find the taxonomy term
    $term = $result->taxonomy_term_data_name;
    //add the term to a string of all the terms we've seen so far
    $count .= $term;
    //make sure to separate them with spaces to make them easier to count
    $count .= ' ' ;
    //count how many rows have the same term as the current one
    $term_count = array_count_values(str_word_count($count, 1));

    if($term_count[$term] <= 3){
      //if this is the third or fewer row with this term, add it to the new result array
      $new_results[] = $result;
    }
  }
  //instead of the normal view output, only show the results we put in our array.
  $view->result = $new_results;
}

นี่เป็นมุมมองของคำศัพท์อนุกรมวิธานที่เชื่อมต่อกับโหนดผ่านทางความสัมพันธ์ หากคุณมีมุมมองของโหนดระยะทางของคุณอาจแตกต่างกันไป

แม้ว่าจะป้องกันการแสดงผลเกิน 3 ต่อเทอม แต่จะไม่ป้องกันการค้นหาที่ส่งคืนผลลัพธ์ทั้งหมดสำหรับแต่ละเทอมดังนั้นจึงไม่ปรับปรุงประสิทธิภาพการทำงานของ SQL เลย หากคุณมีผลลัพธ์จำนวนมากสำหรับแต่ละคำการทำให้แผงมุมมองแยกแสดงขึ้นและวางทั้งหมดในที่เดียวโดยใช้บางอย่างเช่นCTools Page Managerดังนั้นคุณจึงไม่ได้ใช้ข้อความค้นหาจำนวนมาก

เช่นเคยคุณจะต้องการแคชสิ่งนี้ในการผลิต


2
ไม่จำเป็นต้องแสดงความคิดเห็นกับเพศของฉัน มันค่อนข้างเสียหาย t.co/i1dKE8hQ t.co/ATfV3mBGยังไงก็ตามHook_views_pre_build()หรือhook_build_pre_execute()อาจจะใช้งานได้เช่นนี้ที่ช่วยลดประสิทธิภาพการทำงาน แต่ฉันไม่คุ้นเคยกับสิ่งเหล่านั้น หรือคุณอาจจะชอบคำตอบของฉันคำถามนี้ก่อนหน้านี้

อัปเดต: ฉันมีสิทธิ์ใช้งานที่ดี (Crell and stevector) ที่ "คุณไม่สามารถ จำกัด แต่ละกลุ่มแยกกันในการสืบค้นเดียวคุณต้องทำในระยะการเรนเดอร์ SQL ไม่สามารถทำได้อย่างน่าเศร้า" พวกเขายังกล่าวอีกว่า "สิ่งที่ดีที่สุดที่คุณทำได้ก็คือแบบสอบถามแบบรวมกลุ่ม" แต่พวกเขาไม่คิดว่า Views สามารถทำได้เช่นกัน

อาฉันเข้าใจผิดว่าเป็น OP ไม่ว่าในกรณีใดโมดูลPeek Summaryอาจมีประโยชน์ในกรณีนี้แม้ว่าจะมีปัญหาด้านประสิทธิภาพของตัวเองก็ตาม ผู้สร้างเตือนว่ามัน "ยอดเยี่ยม แต่น่ากลัว"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.