Score:0

เช็คเอาต์โฟลว์ ส่งช่องทำเครื่องหมายแบบฟอร์มบานหน้าต่างไปยังฟิลด์บูลีน

ธง br

ฉันสร้างช่องทำเครื่องหมายใน Checkout Flow, CheckoutPane ฉันจะส่งค่าของช่องทำเครื่องหมายไปยังเอนทิตีในโปรไฟล์ผู้ใช้หรือคำสั่งซื้อได้อย่างไร

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

กล่องกาเครื่องหมายพิมพ์ถูกต้อง แต่ไม่สามารถส่งค่าของกล่องกาเครื่องหมายไปยังเอนทิตีตามลำดับ หรือดีกว่าเอนทิตีในโปรไฟล์ผู้ใช้ ฉันสร้างฟิลด์ field_customer_check ในคำสั่งซื้อและลองทำแบบเดียวกับใน Drupal Commerce Checkout Flow Example พร้อมความคิดเห็น https://docs.drupalcommerce.org/commerce2/developer-guide/checkout/create-custom-checkout-pane

ฟังก์ชันสาธารณะ submitPaneForm (อาร์เรย์ &$pane_form, FormStateInterface $form_state, อาร์เรย์ &$complete_form) {
  $values ​​= $form_state->getValue($pane_form['#parents']);
  $this->order->setData('order_comment', $values['comment']);
}

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่ นี่คือรหัสก่อนหน้าของฉันสำหรับ CheckoutPane:

<?php

เนมสเปซ Drupal\mymodule_checkout\Plugin\Commerce\CheckoutPane;

ใช้ Drupal\commerce_checkout\Plugin\Commerce\CheckoutPane\CheckoutPaneBase
ใช้ Drupal\commerce_checkout\Plugin\Commerce\CheckoutPane\CheckoutPaneInterface
ใช้ Drupal\Core\Form\FormStateInterface;
ใช้ Drupal\commerce\InlineFormManager
ใช้ Drupal\Core\Entity\EntityTypeManagerInterface;
ใช้ Symfony\Component\DependencyInjection\ContainerInterface;
ใช้ Drupal\commerce_checkout\Plugin\Commerce\CheckoutFlow\CheckoutFlowInterface


/**
 * ให้บานหน้าต่างข้อความเสร็จสิ้น
 *
 * @CommerceCheckoutPane(
 * id = "agree_terms",
 * label = @Translation("เห็นด้วยอย่างถาวร"),
 * )
 */
class AgreementTerms ขยาย CheckoutPaneBase ใช้ CheckoutPaneInterface {
ฟังก์ชันสาธารณะ buildPaneForm (อาร์เรย์ $pane_form, FormStateInterface $form_state, อาร์เรย์ &$ Complete_form) {
    $order_id = $this->order->id();

        $pane_form['user_check_accept'] = [
          '#type' => 'ช่องทำเครื่องหมาย', 
          '#default_value' => เท็จ
          '#title' =>$this->t('ชื่อช่องทำเครื่องหมายของฉัน'),
          '#required' => เท็จ
          '#weight' => $this->getWeight(),
        ];

        ส่งคืน $pane_form;
        
  }
ฟังก์ชันสาธารณะ submitPaneForm (อาร์เรย์ &$pane_form, FormStateInterface $form_state, อาร์เรย์ &$complete_form) {
  $values ​​= $form_state->getValue($pane_form['#parents']);

  // วิธีส่งค่าจากช่องทำเครื่องหมายในช่องบูลีนในคำสั่งซื้อ
  // ปัญหา field_customer_check ไม่ได้รับข้อมูลใดๆ 
  $this->order->setData('field_customer_check', $values['user_check_accept']);

}

 }
Score:1
ธง eg

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

ในการแก้ปัญหาแรก คุณสามารถอัปเดตฟิลด์ผู้ใช้ได้โดยการเรียกผู้ใช้ปัจจุบันและตั้งค่าที่คุณต้องการดังต่อไปนี้:

ฟังก์ชันสาธารณะ submitPaneForm (อาร์เรย์ &$pane_form, FormStateInterface $form_state, อาร์เรย์ &$complete_form) {
  $values ​​= $form_state->getValue($pane_form['#parents']);

  // รับเอนทิตีผู้ใช้ปัจจุบัน
  $user = User::load(\Drupal::currentUser());

  // ตั้งค่าของฟิลด์
  $user->FIELD_NAME->value = $form_state->getValue('THE VALUE');

  // บันทึกเอนทิตีผู้ใช้
  $user->save;

}

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

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

และตรวจสอบมูลค่าที่มีอยู่ด้วยวิธีเดียวกัน:

ถ้า (!empty($user->FIELD_NAME->value)) { ทำบางอย่าง }
Eurasia-Lab avatar
br flag
ฉันลองหลายครั้ง ฉันมีฟังก์ชันล่องหน มันได้ผล ฉันได้รับค่าจาก field_revoked_consent แต่ฉันไม่สามารถบันทึกค่าช่องทำเครื่องหมายลงในฟิลด์บูลีนได้ บางทีคุณอาจมีวิธีแก้ปัญหา ?
apaderno avatar
us flag
พารามิเตอร์ `User::load()` คือ ID ผู้ใช้ `User::load(\Drupal::currentUser())` จะไม่ทำงาน
Score:0
ธง br

ตอนนี้ฉันพยายามหลายครั้งเพื่อบันทึกไว้ในผู้ใช้ field_revoke_consent แต่ฉันไม่ได้นำค่าจากช่องทำเครื่องหมายมาไว้ในฟิลด์นี้

  ฟังก์ชันสาธารณะ submitPaneForm (อาร์เรย์ &$pane_form, FormStateInterface $form_state, อาร์เรย์ &$complete_form) {
    $values ​​= $form_state->getValue($pane_form['#parents']);

    // รับเอนทิตีผู้ใช้ปัจจุบัน
    $user = User::load(\Drupal::currentUser()->id());
    $fieldconsent = ('field_revoke_consent');
     // ตั้งค่าของฟิลด์
     $user->$fieldconsent->value = $form_state->getValue($pane_form['user_consent_accept']);
  
  
      // บันทึกเอนทิตีผู้ใช้
    $user->save;


    /*
    $บานหน้าต่าง = $form_state->getValue('agree_terms');

    $values ​​= $form_state->getValue($pane_form['#parents']);
    
    $checked = $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']);  
  $user->save;
   */  
  } 
}
Hodba Khalaf avatar
eg flag
คุณต้องลบ ->id() ตามที่เรียก ID ผู้ใช้ เพียงแค่ใช้ "$user = User::load(\Drupal::currentUser());"

โพสต์คำตอบ

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