Puncte:0

Checkout Flow Trimitere casetă de selectare formular panou la câmpul boolean

drapel br

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']);
}

introduceți descrierea imaginii aici

introduceți descrierea imaginii aici 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']);

}

 }
Puncte:1
drapel eg

Dacă am înțeles corect întrebarea, aveți 2 cazuri de utilizare diferite; în primul rând, doriți să actualizați câmpul utilizatorului cu valori din panou, iar al doilea este să îl ascundeți dacă utilizatorul a completat deja informațiile într-o achiziție anterioară.

Pentru a rezolva prima problemă, puteți actualiza câmpurile utilizator apelând utilizatorul curent și setând valoarea dorită după cum urmează:

funcția publică submitPaneForm(array &$pane_form, FormStateInterface $form_state, array &$complete_form) {
  $valori = $form_state->getValue($pane_form['#parinti']);

  // Obține entitatea utilizator curentă.
  $user = User::load(\Drupal::currentUser());

  // Setați valoarea câmpului.
  $user->FIELD_NAME->value = $form_state->getValue('THE VALUE');

  // Salvați entitatea utilizator.
  $utilizator->salvare;

}

Pentru a doua parte a întrebării, trebuie să verificați valorile în timp ce construiți formularul și puteți obține utilizatorul actual în același mod folosind

$user = User::load(\Drupal::currentUser()->id());

și pentru a verifica valoarea existentă în același mod:

dacă (!empty($user->FIELD_NAME->valoare)) { FACEȚI CEVA }
Eurasia-Lab avatar
drapel br
Îl încerc de multe ori, am funcția invizibilă, funcționează. Obțin valoarea din câmpul_revocat_consent. Dar nu pot salva valoarea casetei de selectare în câmpul boolean. Poate ai o solutie?
apaderno avatar
drapel us
Parametrul `User::load()` este ID-ul utilizatorului. `User::load(\Drupal::currentUser())` nu va funcționa.
Puncte:0
drapel br

Încerc acum de multe ori să-l salvez în câmpul utilizatorului_revoke_consent, dar nu aduc valoarea din caseta de selectare în acest câmp.

  funcția publică submitPaneForm(array &$pane_form, FormStateInterface $form_state, array &$complete_form) {
    $valori = $form_state->getValue($pane_form['#parinti']);

    // Obține entitatea utilizator curentă.
    $user = User::load(\Drupal::currentUser()->id());
    $fieldconsent = ('field_revoke_consent');
     // Setați valoarea câmpului.
     $user->$fieldconsent->value = $form_state->getValue($pane_form['user_consent_accept']);
  
  
      // Salvați entitatea utilizator.
    $utilizator->salvare;


    /*
    $pane = $form_state->getValue('termeni_de_acord');

    $valori = $form_state->getValue($pane_form['#parinti']);
    
    $verificat = $form_state->getValue($pane_form['user_consent_accept']['#default_value']);
 
    $user = User::load(\Drupal::currentUser()->id());

   if($checked ==['#default_value' => 1] ) {$user->field_revoke_consent->value = 1; }

   $user->field_revoke_consent->value = $form_state->getValue($pane_form['user_consent_accept']);  
  $utilizator->salvare;
   */  
  } 
}
Hodba Khalaf avatar
drapel eg
trebuie să eliminați ->id() deoarece apelează ID-ul utilizatorului. doar folosește. „$user = User::load(\Drupal::currentUser());”

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.