Score:0

กำลังโหลดเนื้อหาในมุมมองผ่านการอ้างอิงเอนทิตีพี่น้อง

ธง za

ฉันคิดว่าสิ่งที่ฉันต้องทำคือใช้ผลลัพธ์ของ Drupal View หนึ่งเพื่อกรองผลลัพธ์ของมุมมองอื่น นี่คือสิ่งที่ฉันพยายามทำให้สำเร็จ

ฉันมีเนื้อหา 3 ประเภท (ประเภทโหนด): Blog, Blog Post, Biography Page (aka Blog Author)

โพสต์ในบล็อกมีการอ้างอิงเอนทิตีทั้งบล็อกที่ควรอยู่และหน้าชีวประวัติของผู้เขียนอย่างน้อยหนึ่งหน้า

สิ่งที่ฉันต้องทำคือใช้รหัสสำหรับบล็อกที่กำหนดและรับผู้เขียนทั้งหมดที่เกี่ยวข้องผ่านโพสต์บล็อกที่เกี่ยวข้องกลับคืน จากนั้นลบรายการที่ซ้ำกันออกเพื่อแสดงรายชื่อผู้เขียนทั้งหมดภายใต้ "บล็อก" เฉพาะ

ฉันคิดว่าฉันอาจจะใช้ความสัมพันธ์ได้ แต่ยังงุนงงว่าจะได้ผลอย่างไร

ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไร


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

นี่คือไดอะแกรมของสิ่งนี้:

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

ขอบคุณ!

beltouche avatar
cn flag
ดูเหมือนว่าคุณต้องการมุมมองหลายรายการเพื่อทำสิ่งนี้จากคำอธิบายของคุณ คุณสามารถให้รายละเอียดเพิ่มเติม? จุดเริ่มต้นคืออะไร - บล็อกหรือบล็อกโพสต์ รายชื่อผู้แต่งนี้ปรากฏอยู่ที่ใด
Patrick avatar
za flag
@beltouche ฉันได้เพิ่มข้อมูลเพิ่มเติม รวมทั้งไดอะแกรม ซึ่งฉันหวังว่าจะช่วยอธิบายสิ่งที่ฉันพยายามทำให้สำเร็จ โปรดแจ้งให้เราทราบหากฉันสามารถให้ข้อมูลอื่นๆ ได้
Score:1
ธง cn

ฉันจะถือว่ารายชื่อผู้เขียนนี้จะปรากฏ เช่น เป็นบล็อกในหน้าบล็อกโพสต์ เช่นเดียวกับใน "ผู้เขียนรายอื่นที่เกี่ยวข้องกับบล็อกของโพสต์นี้" (ฉันยังถือว่าคุณกำลังใช้ Drupal 8 หรือ 9)

คุณ สามารถ ทำสิ่งนี้กับความสัมพันธ์:

  1. ความสัมพันธ์แรกคือผ่านช่องรหัสบล็อกของโพสต์บล็อกเพื่อรับบล็อก
  2. ความสัมพันธ์ถัดไปใช้ความสัมพันธ์แบบ "ย้อนกลับ" ครั้งแรกผ่านฟิลด์เดียวกันเพื่อค้นหาบล็อกโพสต์ทั้งหมดที่อ้างถึงบล็อกนั้น
  3. ความสัมพันธ์ที่สามใช้ความสัมพันธ์ที่สองเพื่อรับผู้เขียนผ่าน ID ผู้แต่ง

ต่อไปนี้เป็นขั้นตอนที่ฉันแนะนำให้ใช้ฟิลด์

  1. เพิ่มความสัมพันธ์แรก กำหนดให้เป็น "Administrative Title" ที่อ่านง่าย เนื่องจากชื่อในตัวของ Drupal กลายเป็นความลับอย่างรวดเร็ว
  2. ในการตรวจสอบเพิ่มช่องชื่อเรื่องของบล็อกเพื่อยืนยันว่าคุณมีสิ่งที่คาดหวัง (คุณสามารถลบออกได้ในภายหลังหากไม่ต้องการใช้)
  3. เพิ่มความสัมพันธ์ที่สอง อย่าลืมใช้ความสัมพันธ์แรกและตั้งชื่อที่ดีด้วย ใช้ฟิลด์จากความสัมพันธ์ใหม่เป็นการตรวจสอบความถูกต้องอีกครั้ง
  4. เพิ่มความสัมพันธ์ที่สามเพื่อให้แน่ใจว่าใช้ความสัมพันธ์ที่สอง ...

คุณอาจต้องการทำเครื่องหมายที่ช่อง "ต้องการความสัมพันธ์" ในแต่ละกรณี

ใช่ ฉันเห็นว่าคุณได้รับสำเนาจำนวนมากที่คุณจะต้องลบออก คุณ อาจ สามารถกำจัดบางส่วนได้โดยใช้ UI ของ Views แต่นั่นเป็นเรื่องที่ยุ่งยากเสมอ คุณอาจต้องใช้ view hook เพื่อทำความสะอาดสิ่งต่างๆ

Patrick avatar
za flag
แนวคิดคือการแสดงรายชื่อผู้เขียนทั้งหมดในหน้าบล็อกโดยทั่วไปผู้เขียนที่มีโพสต์ในบล็อกที่กำหนดควรมีใบหน้าปรากฏในหน้าบล็อก
Patrick avatar
za flag
แนวทางที่น่าสนใจ ฉันไม่ได้บังเอิญใช้ความสัมพันธ์แบบที่ 3 ต้องเข้าใจว่าส่วนนั้นจะเชื่อมโยงกันอย่างไร แต่ฉันชอบวิธีการ
beltouche avatar
cn flag
หากคุณเริ่มต้นบนหน้าบล็อก แทนที่จะโพสต์บล็อก คุณจะกำจัดความสัมพันธ์แรกที่ฉันระบุไว้
Patrick avatar
za flag
นั่นคือจุดที่ฉันลงจอดด้วย ฉันไม่สามารถให้ Drupal สร้างความสัมพันธ์ได้ค่อนข้างถูกต้องผ่าน UI ดังนั้นฉันจึงต้องแฮ็กมันตลอดทาง แต่ฉันจะให้เครดิตคุณที่ช่วยให้ฉันไปถึงที่นั่น
Patrick avatar
za flag
สำหรับใครก็ตามที่อ่านสิ่งนี้ในอนาคต โปรดดูคำตอบของฉันด้านล่างสำหรับแนวทางสุดท้ายของฉันเกี่ยวกับเรื่องนี้
beltouche avatar
cn flag
ฉันต้องยอมรับว่าฉันยังประหลาดใจที่สิ่งนี้ไม่สามารถทำได้ภายใน UI ทั้งหมด (ยกเว้นการซ้ำซ้อน) ขอบคุณแม้ว่า ฉันดีใจที่สามารถช่วยคุณแก้ปัญหาได้
Patrick avatar
za flag
อาจมีบางวิธีที่ฉันขาดหายไป แต่โดยสุจริตฉันคิดว่า UI ทนทุกข์ทรมานจากการพยายามลดความซับซ้อนของชื่อความสัมพันธ์ด้วย ซึ่งทำให้เรื่องสับสน
Score:0
ธง za

เอาล่ะ หลังจากชำแหละ Drupal Views อีกเล็กน้อยและสอบถามจากมัน ฉันทำสิ่งนี้ (ซึ่งได้รับแรงบันดาลใจจากคำแนะนำในคำตอบจาก @beltouche)

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

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

นี่คือรหัสของฉัน:

<?php
ฟังก์ชัน my_module_views_query_alter (ViewExecutable $view, QueryPluginBase $query) {
  ถ้า ($view->id() == 'ผู้เขียน' && $view->current_display == 'authors_eva') {
    /*
     * โดยพื้นฐานแล้วสิ่งที่ฉันทำที่นี่ถูกบังคับให้สร้างความสัมพันธ์ในแบบที่ฉันรู้ว่าได้ผล
     * ซึ่งฉันทดสอบโดยการเขียนแบบสอบถามใหม่ด้วยตนเองและทดสอบกับฐานข้อมูล
     */
    $table_authors_field_data = $query->getTableInfo('blog_post_authors_node_field_data');

    ถ้า (!empty($table_authors_field_data)) {
      $table_authors_field_data['เข้าร่วม']->leftField = 'blog_post_authors_target_id';
    }

    $table_node_blog = $query->getTableInfo('blog_post_authors_node_field_data__node__blog');

    ถ้า (!empty($table_node_blog)) {
      $table_node_blog['join']->field = 'entity_id';
      $table_node_blog['เข้าร่วม']->leftField = 'entity_id';
      $table_node_blog['join']->leftTable = 'node__blog_post_authors';
    }
  }
}

โพสต์คำตอบ

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