Score:0

ฉันจะแก้ไขฟิลด์รายการสั่งซื้อโดยขึ้นอยู่กับการตรวจสอบความถูกต้องของฟอร์มเอนทิตีแบบอินไลน์ (IEF) ได้อย่างไร

ธง fr

ฉันขยายประเภทรายการสั่งซื้อด้วยฟิลด์บูลีนเพิ่มเติม ก่อนรายการสั่งซื้อจะถูกส่งผ่าน "แบบฟอร์มแก้ไขรายการสั่งซื้อ" (/admin/commerce/orders/{order_id}/edit) ควรตรวจสอบความถูกต้องและฟิลด์บูลีนควรกลายเป็น "จริง" หรือยังคงเป็น "เท็จ"

"แบบฟอร์มแก้ไขคำสั่งซื้อ" ประกอบด้วยแบบฟอร์มเอนทิตีแบบอินไลน์ (IEF) หลายรายการ หนึ่งใน IEF จัดการรายการสั่งซื้อของคำสั่งซื้อ ฉันเพิ่มฟังก์ชันการตรวจสอบที่กำหนดเองด้วยโมดูลที่กำหนดเองของฉันก่อน:

ฟังก์ชัน MYMODULE_inline_entity_form_entity_form_alter(อาร์เรย์ &$entity_form, FormStateInterface &$form_state)
{
...
array_unshift($entity_form['#element_validate'],'MYMODULE_inline_entity_form_validate_hide_gross_price');
...
}

เรียกใช้ฟังก์ชันการตรวจสอบที่กำหนดเองได้สำเร็จ และตรรกะทางธุรกิจ/กระบวนการทั่วไปของฟังก์ชันการตรวจสอบความถูกต้องที่กำหนดเองก็ทำงานได้ดีเช่นกัน

ปัญหาคือ ฉันยังไม่พบวิธีตั้งค่าฟิลด์บูลีนภายในประเภทรายการสั่งซื้อของฉันเลย ทั้งนี้ขึ้นอยู่กับการตรวจสอบความถูกต้องของ IEF ฉันลองกับ $form_state->setValueForElement() ฟังก์ชัน API (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormStateInterface.php/function/FormStateInterface%3A%3AsetValueForElement/9.3.x):

ฟังก์ชัน MYMODULE_inline_entity_form_validate_hide_gross_price (อาร์เรย์ &$entity_form, FormStateInterface $form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"],["#value"=> จริง]);
...
}

ฉันได้รับข้อความแสดงข้อผิดพลาด

ค่านี้ควรเป็นประเภทดั้งเดิมที่ถูกต้อง Drupal\Core\TypedData\Plugin\DataType\BooleanData: ค่า

ถ้าฉันแก้ไขรหัสดังต่อไปนี้:

$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"]["#value"], จริง);

ฉันได้รับข้อผิดพลาด PHP ในบันทึกการเฝ้าระวัง:

TypeError: อาร์กิวเมนต์ 1 ส่งผ่านไปยัง Drupal\Core\Form\FormState::setValueForElement() ต้องเป็นประเภท อาร์เรย์, int ที่กำหนด

ดังนั้นไวยากรณ์ที่ถูกต้องในการตั้งค่าฟิลด์บูลีนภายในประเภทรายการสั่งซื้อด้วยแบบฟอร์ม IEF คืออะไร

Score:0
ธง fr

ฉันได้รับคำใบ้ว่าฉันใช้องค์ประกอบอาร์เรย์ผิด มันได้ผลสำหรับฉัน:

ฟังก์ชัน MYMODULE_inline_entity_form_validate_hide_gross_price (อาร์เรย์ &$entity_form, FormStateInterface $form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"], จริง);
...
}

โพสต์คำตอบ

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