Điểm:1

Sắp xếp truy vấn thực thể tùy chỉnh

lá cờ in

Tôi có các trường "họ" và "tên" bình thường, tuy nhiên tôi cần một cái gì đó nhiều hơn

->sắp xếp('họ_trường', 'ASC')
-> sắp xếp('field_firstname', 'ASC')

Họ là tên tiếng Anh cổ và chứa tiền tố cho tên, vì vậy họ của "St John" cần được sắp xếp thành "Saint John" để xuất hiện trong danh sách ở đúng vị trí.

Các ví dụ khác có thể chứa dấu nháy đơn cần được xóa để sắp xếp, nhưng vẫn hiển thị.

Lý tưởng nhất là tôi muốn có một mô-đun được viết sẵn đẹp mắt để thực hiện việc này, nhưng nghi ngờ là không có mô-đun nào.

Có cách nào để thêm sắp xếp tùy chỉnh vào truy vấn thực thể không? Tôi có thể sẽ cần sử dụng cùng loại này trong chế độ xem để thứ gì đó có thể sử dụng lại được (ví dụ như trong chế độ xem) sẽ là lý tưởng.

Điểm:2
lá cờ cn

Truy vấn thực thể chỉ có sắp xếp khá cơ bản.

Bạn có thể viết một truy vấn phức tạp hơn, chẳng hạn như truy vấn CHỌN.

Tuy nhiên, do bạn muốn sử dụng lại trường này trong Chế độ xem và do bạn có thể có một số quy tắc muốn áp dụng, tôi chỉ cần thêm một trường khác ("tên để sắp xếp") rồi sử dụng hook_entity_presave() để tính toán giá trị bằng cách sử dụng bất kỳ quy tắc nào bạn muốn.

sử dụng hook_entity_presave() đảm bảo rằng giá trị sẽ được cập nhật khi nút được tạo hoặc chỉnh sửa, do đó, nó sẽ luôn hiện hành.

Bạn có thể ẩn trường này trong cài đặt hiển thị thực thể, rồi sắp xếp theo trường đó trong Dạng xem, truy vấn thực thể và bất kỳ thứ gì khác mà bạn muốn.

Nhược điểm của phương pháp này là bạn có một trường khác trong cơ sở dữ liệu, nhưng tôi nghĩ phương pháp này dễ bảo trì và khắc phục sự cố hơn so với cách sắp xếp phức tạp.

Điểm:0
lá cờ in

Trong trường hợp nó giúp ích cho những người khác, tôi đã giải quyết vấn đề này bằng cách lấy tất cả các bản ghi bằng cách sắp xếp cơ bản, sau đó sử dụng usort của PHP với chức năng riêng biệt để lấy lại các trường mong muốn từ đối tượng nút, thao tác và so sánh rồi hiển thị khi cần.

$node_ids = \Drupal::entityQuery('node')
            ->điều kiện('type', 'my_type', '=')
            ->thực thi();    
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple($node_ids);
usort($nodes, [$this, "my_node_sort"]);

Nó đã sắp xếp khoảng 1800 nút phức tạp mà không có độ trễ đáng chú ý, vì vậy có thể không phải là một giải pháp hoàn hảo nhưng khả thi. Cũng hữu ích cho một loại khác mà nó không phải là một loại chữ cái thẳng. Chưa xem xét Chế độ xem, nhưng nghi ngờ tôi có thể sử dụng quy trình tương tự.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.