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();
}
}
}