Score:1

การเรียงลำดับเอนทิตีแบบสอบถามแบบกำหนดเอง

ธง in

ฉันมีช่อง "นามสกุล" และ "ชื่อจริง" ปกติ แต่ฉันต้องการอะไรมากกว่านั้น

->sort('field_surname', 'ASC')
->sort('field_firstname', 'ASC')

นามสกุลเป็นชื่อภาษาอังกฤษแบบเก่าและมีคำนำหน้าชื่อ ดังนั้นนามสกุลของ "เซนต์จอห์น" จะต้องเรียงเป็น "เซนต์จอห์น" เพื่อให้ปรากฏในรายการในตำแหน่งที่ถูกต้อง

ตัวอย่างอื่นๆ อาจมีเครื่องหมายอัญประกาศเดี่ยวซึ่งจำเป็นต้องลบออกสำหรับการจัดเรียง แต่ยังคงแสดงอยู่

เป็นการดีที่ฉันต้องการโมดูลที่เขียนไว้ล่วงหน้าที่ดีในการทำเช่นนี้ แต่สงสัยว่าไม่มี

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

Score:2
ธง cn

ข้อความค้นหาเอนทิตีมีการจัดเรียงแบบพื้นฐานเท่านั้น

คุณทำได้ เขียนแบบสอบถามที่ซับซ้อนมากขึ้น เช่น แบบสอบถาม SELECT.

อย่างไรก็ตาม เนื่องจากคุณต้องการใช้สิ่งนี้ซ้ำใน Views และเนื่องจากคุณอาจมีกฎหลายข้อที่คุณต้องการใช้ ฉันจะเพิ่มฟิลด์อื่น ("ชื่อสำหรับการเรียงลำดับ") แล้วใช้ hook_entity_presave() เพื่อคำนวณค่าโดยใช้กฎใดก็ได้ที่คุณต้องการ

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

คุณสามารถซ่อนฟิลด์นี้ในการตั้งค่าการแสดงเอนทิตี จากนั้นจัดเรียงตามฟิลด์ในมุมมอง แบบสอบถามเอนทิตี และสิ่งอื่นๆ ที่คุณต้องการ

ข้อเสียของวิธีนี้คือคุณมีฟิลด์อื่นในฐานข้อมูล แต่ฉันคิดว่าวิธีนี้ดูแลรักษาและแก้ไขปัญหาได้ง่ายกว่าการจัดเรียงที่ซับซ้อน

Score:0
ธง in

ในกรณีที่มันช่วยผู้อื่นได้ ฉันแก้ไขปัญหานี้โดยการดึงระเบียนทั้งหมดด้วยการจัดเรียงพื้นฐาน จากนั้นใช้ usort ของ PHP พร้อมฟังก์ชัน bespoke เพื่อดึงฟิลด์ที่ต้องการกลับจากวัตถุโหนด จัดการและเปรียบเทียบ แล้วแสดงผลตามต้องการ

$node_ids = \Drupal::entityQuery('โหนด')
            ->เงื่อนไข('ประเภท', 'my_type', '=')
            ->ดำเนินการ ();    
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($node_ids);
usort($nodes, [$this, "my_node_sort"]);

มันจัดเรียงโหนดที่ซับซ้อนประมาณ 1,800 โหนดโดยไม่มีความล่าช้าที่สังเกตได้ ดังนั้นอาจไม่ใช่โซลูชันที่สมบูรณ์แบบ แต่ใช้งานได้ ยังมีประโยชน์สำหรับการเรียงลำดับอื่นที่ไม่ใช่การเรียงตามตัวอักษรตรงๆ ยังไม่ได้ดู Views แต่สงสัยว่าฉันสามารถใช้กระบวนการที่คล้ายกันได้

โพสต์คำตอบ

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