Score:0

จัดลำดับเอนทิตีอ้างอิงตามฟิลด์โดยทางโปรแกรม

ธง es
gr8

ฉันมีลำโพงประเภทเนื้อหาที่ใช้ประเภทเนื้อหาเหตุการณ์เป็นข้อมูลอ้างอิง กิจกรรมมีฟิลด์วันที่และเวลาเริ่มต้น อาจมีเหตุการณ์จำนวนเท่าใดก็ได้ที่ผู้พูดพูด เมื่อไปที่หน้าผู้พูด เหตุการณ์จะไม่เรียงตามวันที่ แต่จะเรียงตามรหัส ฉันจะเปลี่ยนสิ่งนี้โดยทางโปรแกรมได้อย่างไร

ฉันสามารถรับค่าฟิลด์และจัดเรียงตามวันที่ได้ แต่ฉันไม่สามารถตั้งค่ากลับเป็นตัวแปรได้

ลิงค์ 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(); 
    }
  }
}
Kevin avatar
in flag
คุณยังคงต้องเปลี่ยนลำดับในอาร์เรย์เรนเดอร์เพื่อให้มีผลกับเอาต์พุต
Kevin avatar
in flag
การวางตรรกะนี้ลงในตัวจัดรูปแบบฟิลด์จะง่ายกว่าหรือไม่
Jaypan avatar
de flag
นั่นคือสิ่งที่ฉันจะทำ
es flag
gr8
ขอบคุณ @Kevin ขออภัย ฉันยังใหม่กับสิ่งนี้ จากสิ่งที่ฉันเข้าใจ ฉันจะต้องสร้างตัวจัดรูปแบบฟิลด์แบบกำหนดเองที่เรียงลำดับเอนทิตีที่อ้างอิงตามวันที่เหตุการณ์ จากนั้นตั้งค่าตัวจัดรูปแบบฟิลด์นั้นสำหรับฟิลด์เอนทิตีที่อ้างอิงในการแสดงของ ประเภทเนื้อหาของผู้พูด ใช่ไหม นั่นจะไม่เป็นวิธีที่นานและเสียเวลาในการทำเช่นนั้นหรือ? ฉันพยายามทำวิธีที่เร็วกว่านี้เพราะมันเป็นแค่การเรียงลำดับ
Kevin avatar
in flag
ปัญหาคือคุณไม่ต้องการจัดการกับการเรนเดอร์อาร์เรย์ที่นี่ และเมื่อคุณต้องการแสดงฟิลด์นี้ที่อื่น คุณจะต้องทำโค้ดอีกครั้งในที่อื่น ตัวจัดรูปแบบฟิลด์สามารถนำมาใช้ซ้ำได้
es flag
gr8
สมเหตุสมผล ขอบคุณ @Kevin
4uk4 avatar
cn flag
การสนทนาที่คล้ายกันเกี่ยวกับการจัดการรายการเอนทิตีที่อ้างอิงในตัวจัดรูปแบบฟิลด์ รวมถึงตัวอย่างโค้ด: https://drupal.stackexchange.com/questions/294728/filter-the-list-of-entities-referenced-by-entity-reference-revisions -สนาม
4uk4 avatar
cn flag
สำหรับวิธีแก้ปัญหาแบบไม่ต้องใช้โค้ด คุณสามารถใช้ https://www.drupal.org/project/eva
es flag
gr8
ใช่ ฉันกำลังสร้างตัวจัดรูปแบบฟิลด์ ขอบคุณ @4k4

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา