Puncte:1

Sortare personalizată a interogărilor de entitate

drapel in

Am câmpuri normale „nume” și „prenume”, totuși am nevoie de ceva mai mult decât

->sort('câmp_nume', 'ASC')
->sort('câmp_nume', 'ASC')

Numele de familie sunt nume englezești vechi și conțin prefixe la nume, așa că un nume de familie „Sfântul Ioan” ar trebui să fie sortat ca „Sfântul Ioan” pentru a apărea în listă în locul corect.

Alte exemple ar putea conține un apostrof care ar trebui eliminat pentru sortare, dar încă afișat.

În mod ideal, aș dori un modul frumos pre-scris pentru a face asta, dar bănuiesc că nu există unul.

Există vreo modalitate de a adăuga o sortare personalizată la o interogare de entitate? Probabil că va trebui să folosesc același fel într-o vizualizare, astfel încât ceva care este reutilizabil (de exemplu într-o vizualizare) ar fi ideal.

Puncte:2
drapel cn

Interogarea de entitate are disponibilă doar o sortare destul de simplă.

Ai putea scrieți o interogare mai complicată, cum ar fi o interogare SELECT.

Cu toate acestea, având în vedere că doriți să reutilizați acest lucru în Views și având în vedere că probabil aveți mai multe reguli pe care doriți să le aplicați, aș adăuga doar un alt câmp ("nume pentru sortare") și apoi aș folosi hook_entity_presave() pentru a calcula valoarea utilizând orice reguli doriți.

Folosind hook_entity_presave() se asigură că valoarea va fi actualizată atunci când nodul este creat sau editat, deci va fi mereu actuală.

Puteți ascunde acest câmp în setările de afișare a entității și apoi puteți sorta după el în Vizualizări, entityquery și orice altceva doriți.

Dezavantajul acestei abordări este că aveți un alt câmp în baza de date, dar cred că această abordare este mai ușor de întreținut și de depanat decât un fel complicat.

Puncte:0
drapel in

În cazul în care îi ajută pe alții, am rezolvat acest lucru trăgând toate înregistrările cu un sort de bază și apoi folosind usort-ul PHP cu o funcție personalizată pentru a trage înapoi câmpurile dorite din obiectul nod, a manipula și a compara și apoi a afișa după cum este necesar.

$node_ids = \Drupal::entityQuery('nod')
            ->condition('tip', 'tipul_meu', '=')
            ->execute();    
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($node_ids);
usort($noduri, [$this, "my_node_sort"]);

A sortat în jur de 1800 de noduri complexe fără întârziere vizibilă, așa că poate să nu fie o soluție perfectă, dar funcțională. De asemenea, a venit util pentru un alt sort unde nu era o sortare alfabetică directă. Nu m-am uitat în Views, dar bănuiesc că pot folosi un proces similar.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.