Creez o casetă de verificare în fluxul de checkout, CheckoutPane. Cum pot trimite valoarea casetei de selectare către o entitate din profilul utilizatorului sau din comandă.
Descriere: Am nevoie de o casetă de selectare în Panoul de verificare, când Clientul selectează caseta de selectare și face clic pe Trimite, trebuie să salvez valoarea într-un câmp din Comanda sau Profilul utilizatorului specific cu data. Când clientul selectează caseta de selectare pentru prima dată, aceasta este ascunsă pentru comenzile viitoare.
Caseta de selectare este imprimată corect, dar nu poate trimite valoarea casetei de selectare unei entități în ordine, sau mai bine unei entități din profilul utilizatorului. Creez câmpul field_customer_check în comandă și îl încerc la fel ca în exemplul de flux de comandă Drupal Commerce cu comentarii. https://docs.drupalcommerce.org/commerce2/developer-guide/checkout/create-custom-checkout-pane
funcția publică submitPaneForm(array &$pane_form, FormStateInterface $form_state, array &$complete_form) {
$valori = $form_state->getValue($pane_form['#parinti']);
$this->order->setData('comentarii_comanda', $valori['comentarii']);
}
Iată codul meu anterior pentru CheckoutPane:
<?php
spațiu de nume Drupal\mymodule_checkout\Plugin\Commerce\CheckoutPane;
utilizați Drupal\commerce_checkout\Plugin\Commerce\CheckoutPane\CheckoutPaneBase;
utilizați Drupal\commerce_checkout\Plugin\Commerce\CheckoutPane\CheckoutPaneInterface;
utilizați Drupal\Core\Form\FormStateInterface;
utilizați Drupal\commerce\InlineFormManager;
utilizați Drupal\Core\Entity\EntityTypeManagerInterface;
utilizați Symfony\Component\DependencyInjection\ContainerInterface;
utilizați Drupal\commerce_checkout\Plugin\Commerce\CheckoutFlow\CheckoutFlowInterface;
/**
* Oferă panoul de mesaje de finalizare.
*
* @CommerceCheckoutPane(
* id = "agree_terms",
* etichetă = @Translation ("De acord permanent"),
* )
*/
clasa AgreeTerms extinde CheckoutPaneBase implementează CheckoutPaneInterface {
funcția publică buildPaneForm(array $pane_form, FormStateInterface $form_state, array &$complete_form) {
$comanda_id = $aceasta->comanda->id();
$pane_form['user_check_accept'] = [
'#type' => 'caseta de selectare',
'#default_value' => FALSE,
'#title' =>$this->t('Titlul casetei mele de selectare'),
'#required' => FALSE,
'#weight' => $this->getWeight(),
];
returnează $pane_form;
}
funcția publică submitPaneForm(array &$pane_form, FormStateInterface $form_state, array &$complete_form) {
$valori = $form_state->getValue($pane_form['#parinti']);
// Cum se trimite valoarea dintr-o casetă de selectare într-un câmp boolean din comandă
// Problemă, field_customer_check nu primește date
$this->order->setData('field_customer_check', $values['user_check_accept']);
}
}