ฉันมีลำโพงประเภทเนื้อหาที่ใช้ประเภทเนื้อหาเหตุการณ์เป็นข้อมูลอ้างอิง กิจกรรมมีฟิลด์วันที่และเวลาเริ่มต้น อาจมีเหตุการณ์จำนวนเท่าใดก็ได้ที่ผู้พูดพูด เมื่อไปที่หน้าผู้พูด เหตุการณ์จะไม่เรียงตามวันที่ แต่จะเรียงตามรหัส ฉันจะเปลี่ยนสิ่งนี้โดยทางโปรแกรมได้อย่างไร
ฉันสามารถรับค่าฟิลด์และจัดเรียงตามวันที่ได้ แต่ฉันไม่สามารถตั้งค่ากลับเป็นตัวแปรได้
ลิงค์ Drupal API ที่เกี่ยวข้อง
ใช้ \Drupal\Component\Utility\SortArray;
ฟังก์ชัน mytheme_preprocess_node__speaker_page(&$ตัวแปร) {
$node = $variables['โหนด'];
$entity_ids = [];
ถ้า (โหนด $) {
ถ้า (isset($node->field_events)) {
$items = $node->field_events; // การอ้างอิงเอนทิตี
$unsorted=array();
foreach ($ รายการเป็น $ รายการ) {
$target_id = $item->target_id;
$field_event = $item->entity;
// สร้างอาร์เรย์ที่ไม่เรียงลำดับใหม่ด้วย ID เป้าหมายและวันที่เหตุการณ์ สิ่งนี้ใช้สำหรับการเรียงลำดับ
array_push($ไม่เรียงลำดับ, array('target_id' => $target_id, 'event_date' => strtotime($field_event->field_date_of_event->value)));
}
// การเรียงลำดับ
usort($ไม่เรียงลำดับ, ฟังก์ชัน ($a, $b) {
กลับ SortArray::sortByKeyInt($a, $b, 'event_date');
});
// รหัสที่เรียงลำดับ
$new_entity_ids = array_column($ไม่เรียงลำดับ, 'target_id');
$items_new = \Drupal\node\Entity\Node::loadMultiple($new_entity_ids);
$variables['node']->field_events = $items_new; // สิ่งนี้ไม่ทำงาน
//$ตัวแปร['node']->set($field_name)->referencedEntities();
}
}
}