Điểm:0

Lập trình sắp xếp lại các thực thể được tham chiếu theo trường

lá cờ es
gr8

Tôi có loại nội dung Diễn giả sử dụng loại nội dung Sự kiện làm tham chiếu. Sự kiện có trường ngày và giờ bắt đầu. Có thể có bất kỳ số lượng sự kiện nào mà một diễn giả phát biểu, khi truy cập trang diễn giả, các sự kiện không được sắp xếp theo ngày, chúng được sắp xếp theo id. Làm cách nào để thay đổi điều này theo chương trình?

Tôi có thể lấy giá trị trường và sắp xếp chúng theo ngày, nhưng tôi không thể đặt chúng trở lại biến.

Liên kết API Drupal có liên quan

sử dụng \Drupal\Thành phần\Utility\SortArray;


function mytheme_pre process_node__ speaker_page(&$variables) {
  $node = $variables['node'];
  $entity_ids = [];
  nếu ($nút) {
    if (isset($node->field_events)) {
      $items = $node->field_events; // tham chiếu thực thể
      $unsorted=mảng();
      foreach ($items as $item) {
        $ target_id = $ item-> target_id;
        $field_event = $item->thực thể;
        //tạo một mảng chưa sắp xếp mới với id mục tiêu và ngày sự kiện, cái này được sử dụng để sắp xếp
        array_push($unsorted, array('target_id' => $target_id, 'event_date' => strtotime($field_event->field_date_of_event->value)));
      }
      //sắp xếp
      usort($unsorted, function ($a, $b) {
        trả về SortArray::sortByKeyInt($a, $b, 'event_date');
      });
      //id đã sắp xếp
      $new_entity_ids = array_column($unsorted, 'target_id');

      $items_new = \Drupal\node\Entity\Node::loadMultiple($new_entity_ids);
      $variables['node']->field_events = $items_new; // cái này không hoạt động
      //$variables['node']->set($field_name)->referencedEntities(); 
    }
  }
}
Kevin avatar
lá cờ in
Bạn vẫn phải thay đổi thứ tự trong mảng kết xuất để điều này có tác dụng đối với đầu ra.
Kevin avatar
lá cờ in
Sẽ không dễ dàng hơn nếu bỏ logic này vào một bộ định dạng trường?
Jaypan avatar
lá cờ de
Đó là nơi tôi sẽ làm điều đó.
lá cờ es
gr8
cảm ơn @Kevin, xin lỗi, tôi chưa quen với điều này, theo những gì tôi hiểu, tôi sẽ cần tạo một trình định dạng trường tùy chỉnh để sắp xếp các thực thể được tham chiếu theo ngày sự kiện, sau đó đặt trình định dạng trường đó cho trường thực thể được tham chiếu trong màn hình của loại nội dung diễn giả, phải không? Đó sẽ không phải là một cách lâu hơn và tốn thời gian để làm điều đó? Tôi đã cố gắng làm một cách nhanh hơn vì nó chỉ là một loại.
Kevin avatar
lá cờ in
Vấn đề là bạn không thực sự muốn xử lý thao tác kết xuất mảng ở đây và thời điểm bạn muốn hiển thị trường này ở bất kỳ nơi nào khác, bạn sẽ phải thực hiện lại mã ở một nơi khác. Bộ định dạng trường có thể sử dụng lại được.
lá cờ es
gr8
Có ý nghĩa, cảm ơn @Kevin
4uk4 avatar
lá cờ cn
Thảo luận tương tự về thao tác danh sách thực thể được tham chiếu trong trình định dạng trường bao gồm ví dụ về mã: https://drupal.stackexchange.com/questions/294728/filter-the-list-of-entities-referenced-by-entity-reference-revisions -cánh đồng
4uk4 avatar
lá cờ cn
Đối với giải pháp không có mã, bạn có thể sử dụng https://www.drupal.org/project/eva
lá cờ es
gr8
vâng, tôi đang tạo một bộ định dạng trường, cảm ơn @4k4

Đă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.