Score:2

Why can't some fields be moved within details element?

ธง us

I am trying to move 2 form fields to the advanced sidebar: dismissible and status. Status was already part of the meta container and setting #group='meta' on dismissable also placed it there; but these weren't in the proper order. Nothing I do seems to have any impact on:

  • dismissible
  • standard meta fields: published, author, revision log
  • status

Both dismissible and status are fields added by the Sitewide Alert module which defines the entity which this is the edit form for.

I gave up trying to move my 2 fields (together) so I created my own details block as:

  $form['alert_settings'] = [
    '#type' => 'details',
    '#group' => 'advanced',
    '#weight' => -99,  
    '#title' => t('Alert settings'),
    '#tree' => TRUE,
    '#access' => TRUE,
    '#open' => TRUE,
  ];

and then assigned both fields #group='alert_settings'. This works fine as it creates a new details group which is placed at the top of the right sidebar. Perfect, except I want status to be the top item in this block, followed by dismissible.

No matter which of the status #weight options I set (or dismissable ones); I can't change the order of these.

I have tried:

  $form['status']['#weight'] = -99;
  $form['status']['widget']['#weight'] = -99;
  $form['status']['widget']['value']['#weight'] = -99;

What am I missing here?

Score:2
ธง cn

ในที่สุดดูเหมือนว่าจะลงไปที่รหัสนี้ใน EntityFormDisplay::processForm():

// กำหนดน้ำหนักที่กำหนดค่าในการแสดงแบบฟอร์ม
foreach ($this->getComponents() เป็น $name => $options) {
  ถ้า (isset($element[$name])) {
    $element[$name]['#weight'] = $options['weight'];
  }
}

วิธีการนี้คือก #กระบวนการ โทรกลับสำหรับแบบฟอร์มที่ทำงานหลังจากแบบฟอร์มแก้ไข hooks ดังนั้นการเปลี่ยนแปลงของคุณจะหายไป

คุณสามารถเพิ่มการเรียกกลับกระบวนการของคุณเองและเปลี่ยนน้ำหนักที่นั่นได้ แต่อาจสะอาดกว่าเล็กน้อยหากแก้ไขที่ระดับส่วนประกอบด้วย hook_entity_form_display_alter(), เช่น.:

ฟังก์ชัน MODULE_entity_form_display_alter (\Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display อาร์เรย์ $บริบท) {
  ถ้า ($context['entity_type'] == 'sitewide_alert') {
    $status = $form_display->getComponent('สถานะ');
    // 'ปิด' ถูกตั้งค่าเป็นน้ำหนักของฟิลด์ฐาน -10
    $สถานะ['น้ำหนัก'] = -11;
    $form_display->setComponent('สถานะ', $สถานะ);
  }
}

อนึ่ง $form['status']['#weight'] จะเป็นตัวเลือกที่ถูกต้องหากการเรียกกลับของกระบวนการไม่ได้แทนที่

liquidcms avatar
us flag
สิ่งนี้ได้ผล ขอบคุณสำหรับสิ่งนี้.ไม่เคยใช้ตะขอนั้นมาก่อน แต่จะจำไว้อย่างแน่นอนเพราะฉันเจอปัญหานี้สองสามครั้งแล้วที่องค์ประกอบแถบด้านข้างเราไม่สามารถเคลื่อนย้ายได้
cn flag
ไม่มีปัญหา ฉันติดตามว่าปัญหามาจากที่ใดและอัปเดตคำตอบในกรณีที่คุณสนใจ ดูเหมือนว่าจะค่อนข้าง âby designâ
liquidcms avatar
us flag
ขอบคุณสำหรับข้อมูลเพิ่มเติม ไม่น่าแปลกใจที่โมดูลได้เข้ารหัสบางอย่างเพื่อบังคับสิ่งแปลก ๆ ฉันต้องใช้เวลาสักพักกว่าจะรู้ว่าเหตุใดฉันจึงไม่สามารถระบุข้อมูลเอนทิตีได้ เมื่อมีคนชี้ให้เห็นว่ามีโค้ดในโมดูลที่บล็อกการทำให้ข้อมูลระบุเอนทิตีได้อย่างชัดเจน (โดยไม่มีเหตุผลที่ดี)
cn flag
ฉันเห็นคำถามนั้นเช่นกัน ใช้เวลา 20 นาทีในการสะกิดรหัสอย่างสับสนก่อนที่ 4k4 จะใช้งานได้อย่างขอบคุณและนำสติมาให้ ฉันไม่เคยคิดที่จะมองหาสิ่งที่กลายเป็นปัญหาเช่นกัน ปัญหาที่ตลกสำหรับคำถาม _this_ ไม่ใช่โมดูลนั้น รหัสการแทนที่น้ำหนักอยู่ในแกนหลัก

โพสต์คำตอบ

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