У меня есть тип контента Speaker, который использует тип контента Event в качестве ссылки. Событие имеет поле даты и времени начала. Мероприятий, на которых выступает спикер, может быть любое количество, при посещении страницы спикера события упорядочены не по дате, а по id. Как мне программно изменить это?
Я могу получить значение поля и отсортировать его по дате, но не могу вернуть его в переменную.
Связанная ссылка API Drupal
используйте \Drupal\Component\Utility\SortArray;
функция mytheme_preprocess_node__speaker_page(&$variables) {
$узел = $переменные['узел'];
$entity_ids = [];
если ($ узел) {
если (isset($node->field_events)) {
$items = $node->field_events; // ссылка на сущность
$ несортированный = массив ();
foreach ($items as $item) {
$target_id = $item->target_id;
$field_event = $item->сущность;
//создание нового несортированного массива с целевым идентификатором и датой события, это используется для сортировки
array_push($unsorted, array('target_id' => $target_id, 'event_date' => strtotime($field_event->field_date_of_event->value)));
}
//сортировка
usort($unsorted, функция ($a, $b) {
вернуть SortArray::sortByKeyInt($a, $b, 'event_date');
});
//отсортированные идентификаторы
$new_entity_ids = array_column($unsorted, 'target_id');
$items_new = \Drupal\node\Entity\Node::loadMultiple($new_entity_ids);
$variables['node']->field_events = $items_new; // это не работает
//$variables['node']->set($field_name)->referencedEntities();
}
}
}