Puncte:0

Cum pot modifica un câmp de articol de comandă în funcție de validarea formularului de entitate inline (IEF)?

drapel fr

Mi-am extins tipul de articol al comenzii cu un câmp boolean suplimentar. Înainte ca articolul de comandă să fie trimis prin „formular de modificare a comenzii” (/admin/commerce/orders/{order_id}/edit), ar trebui validat și câmpul boolean ar trebui să devină „adevărat” sau să rămână „fals”.

„Formularul de editare a comenzii” conține mai multe forme de entitate inline (IEF). Unul dintre IEF se ocupă de articolele de comandă ale comenzii. Adaug mai întâi o funcție de validare personalizată cu modulul meu personalizat:

funcția MYMODULE_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface &$form_state)
{
...
array_unshift($entity_form['#element_validate'],'MYMODULE_inline_entity_form_validate_hide_gross_price');
...
}

Funcția de validare personalizată este invocată cu succes și logica generală de afaceri/proces a funcției de validare personalizată funcționează bine.

Problema este că nu am găsit încă o modalitate de a seta valoarea câmpului meu boolean în interiorul tipului de articol de comandă, în funcție de validarea IEF. Am încercat-o cu $form_state->setValueForElement() Funcția API (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormStateInterface.php/function/FormStateInterface%3A%3AsetValueForElement/9.3.x):

funcția MYMODULE_inline_entity_form_validate_hide_gross_price(array &$entity_form, FormStateInterface $form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"],["#value"=> true]);
...
}

Primesc un mesaj de eroare

Această valoare ar trebui să fie de tipul primitiv corect. Drupal\Core\TypedData\Plugin\DataType\BooleanData: valoare

Dacă modific codul după cum urmează:

$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"]["#value"], true);

Primesc o eroare PHP în jurnalele watchdog:

TypeError: Argumentul 1 a fost transmis Drupal\Core\Form\FormState::setValueForElement() trebuie să fie de tipul matrice, int dat

Deci, care este sintaxa corectă pentru a seta o valoare de câmp boolean în interiorul unui tip de articol de comandă cu formular IEF?

Puncte:0
drapel fr

Am primit indiciu că am folosit elementele de matrice greșite. Deci la mine a funcționat:

funcția MYMODULE_inline_entity_form_validate_hide_gross_price(array &$entity_form, FormStateInterface $form_state) {
...
$form_state->setValueForElement($entity_form["field_MYFIELD_hide_gross_price"]["widget"]["value"], true);
...
}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.