Am un tip de conținut Speaker care folosește un tip de conținut Event ca referință. Evenimentul are un câmp pentru data și oră de începere. Pot exista orice număr de evenimente la care vorbește un vorbitor, când vizitează pagina vorbitorului, evenimentele nu sunt ordonate după dată, sunt ordonate după id. Cum schimb asta în mod programatic?
Pot să obțin valoarea câmpului și să le sortez după dată, dar nu pot să le setez înapoi la variabilă.
Link API Drupal asociat
utilizați \Drupal\Component\Utility\SortArray;
funcția mytheme_preprocess_node__speaker_page(&$variabile) {
$nod = $variabile['nod'];
$entity_ids = [];
dacă ($nod) {
if (isset($nod->field_events)) {
$items = $nod->field_events; //referință la entitate
$nesortat=matrice();
foreach ($articole ca $item) {
$target_id = $articol->target_id;
$field_event = $item->entity;
//crearea unei noi matrice nesortate cu id-ul țintă și data evenimentului, aceasta este folosită pentru sortare
array_push($unsorted, array('target_id' => $target_id, 'event_date' => strtotime($field_event->field_date_of_event->value)));
}
//triere
usort($nesortat, funcție ($a, $b) {
return SortArray::sortByKeyInt($a, $b, 'data_evenimentului');
});
//ID-uri sortate
$new_entity_ids = array_column($nesorted, 'target_id');
$items_new = \Drupal\node\Entity\Node::loadMultiple($new_entity_ids);
$variabile['nod']->field_events = $items_new; //asta nu merge
//$variabile['nod']->set($nume_câmp)->referencedEntities();
}
}
}