Điểm:0

Luồng thanh toán Gửi hộp kiểm biểu mẫu ngăn tới trường Boolean

lá cờ br

Tôi tạo Hộp kiểm trong Luồng thanh toán, CheckoutPane. Làm cách nào tôi có thể gửi Giá trị của Hộp kiểm tới Thực thể trong Hồ sơ người dùng hoặc Đơn hàng.

Mô tả: Tôi cần một Hộp kiểm trong CheckoutPane, khi Khách hàng chọn Hộp kiểm và nhấp vào gửi, tôi phải lưu giá trị vào một Trường trong Đơn hàng hoặc Hồ sơ của người dùng cụ thể kèm theo ngày. Khi khách hàng chọn hộp kiểm lần đầu tiên, hộp kiểm này sẽ bị ẩn cho các đơn đặt hàng trong tương lai.

Hộp kiểm được in chính xác, nhưng không thể gửi giá trị của hộp kiểm cho một thực thể theo thứ tự hoặc tốt hơn là một thực thể trong hồ sơ người dùng. Tôi tạo Trường field_customer_check trong Đơn đặt hàng và thử giống như trong Ví dụ về quy trình thanh toán Drupal Commerce có nhận xét. https://docs.drupalcommerce.org/commerce2/developer-guide/checkout/create-custom-checkout-pane

hàm công khai submitPaneForm(mảng &$pane_form, FormStateInterface $form_state, mảng &$complete_form) {
  $values ​​= $form_state->getValue($pane_form['#parents']);
  $this->order->setData('order_comment', $values['comment']);
}

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây Đây là Mã trước đây của tôi cho CheckoutPane:

<?php

không gian tên Drupal\mymodule_checkout\Plugin\Commerce\CheckoutPane;

sử dụng Drupal\commerce_checkout\Plugin\Commerce\CheckoutPane\CheckoutPaneBase;
sử dụng Drupal\commerce_checkout\Plugin\Commerce\CheckoutPane\CheckoutPaneInterface;
sử dụng Drupal\Core\Form\FormStateInterface;
sử dụng Drupal\commerce\InlineFormManager;
sử dụng Drupal\Core\Entity\EntityTypeManagerInterface;
sử dụng Symfony\Component\DependencyInjection\ContainerInterface;
sử dụng Drupal\commerce_checkout\Plugin\Commerce\CheckoutFlow\CheckoutFlowInterface;


/**
 * Cung cấp khung thông báo hoàn thành.
 *
 * @C CommerceCheckoutPane (
 * id = "đồng_ý_điều_kiện",
 * nhãn = @Translation("Đồng ý vĩnh viễn"),
 * )
 */
class AgreeTerms extends CheckoutPaneBase implements CheckoutPaneInterface {
chức năng công khai buildPaneForm(mảng $pane_form, FormStateInterface $form_state, mảng &$complete_form) {
    $order_id = $this->order->id();

        $pane_form['user_check_accept'] = [
          '#type' => 'hộp kiểm', 
          '#default_value' => SAI,
          '#title' =>$this->t('Tiêu đề hộp kiểm của tôi'),
          '#required' => SAI,
          '#weight' => $this->getWeight(),
        ];

        trả về $pane_form;
        
  }
hàm công khai submitPaneForm(mảng &$pane_form, FormStateInterface $form_state, mảng &$complete_form) {
  $values ​​= $form_state->getValue($pane_form['#parents']);

  // Cách gửi giá trị từ Hộp kiểm trong Trường Boolean trong Đơn hàng
  // Sự cố, field_customer_check không lấy được dữ liệu 
  $this->order->setData('field_customer_check', $values['user_check_accept']);

}

 }
Điểm:1
lá cờ eg

Nếu tôi hiểu đúng câu hỏi, bạn có 2 trường hợp sử dụng khác nhau; đầu tiên, bạn muốn cập nhật trường người dùng với các giá trị từ ngăn và thứ hai là ẩn nó nếu người dùng đã điền thông tin trong lần mua trước.

Để giải quyết vấn đề đầu tiên, bạn có thể cập nhật các trường người dùng bằng cách gọi người dùng hiện tại và đặt giá trị mà bạn muốn như sau:

hàm công khai submitPaneForm(mảng &$pane_form, FormStateInterface $form_state, mảng &$complete_form) {
  $values ​​= $form_state->getValue($pane_form['#parents']);

  // Lấy thực thể người dùng hiện tại.
  $user = Người dùng::load(\Drupal::currentUser());

  // Đặt giá trị cho trường.
  $user->FIELD_NAME->value = $form_state->getValue('THE VALUE');

  // Lưu thực thể người dùng.
  $ người dùng-> lưu;

}

Đối với phần thứ hai của câu hỏi, bạn cần kiểm tra các giá trị trong khi tạo biểu mẫu và bạn có thể lấy người dùng hiện tại theo cách tương tự bằng cách sử dụng

$user = Người dùng::load(\Drupal::currentUser()->id());

và để kiểm tra giá trị hiện có theo cùng một cách:

if (!empty($user->FIELD_NAME->value)) { LÀM SOMETHING }
Eurasia-Lab avatar
lá cờ br
Tôi đã thử nhiều lần, tôi có chức năng vô hình, nó hoạt động. Tôi nhận được Giá trị từ trường_revoked_consent. Nhưng tôi không thể lưu giá trị hộp kiểm vào trường boolean. Có lẽ bạn có một giải pháp?
apaderno avatar
lá cờ us
Tham số `User::load()` là ID người dùng. `User::load(\Drupal::currentUser())` sẽ không hoạt động.
Điểm:0
lá cờ br

Bây giờ tôi đã thử nhiều lần để lưu nó vào trường người dùng_revoke_consent, nhưng tôi không mang giá trị từ hộp kiểm vào trường này.

  hàm công khai submitPaneForm(mảng &$pane_form, FormStateInterface $form_state, mảng &$complete_form) {
    $values ​​= $form_state->getValue($pane_form['#parents']);

    // Lấy thực thể người dùng hiện tại.
    $user = Người dùng::load(\Drupal::currentUser()->id());
    $fieldconsent = ('field_revoke_consent');
     // Đặt giá trị cho trường.
     $user->$fieldconsent->value = $form_state->getValue($pane_form['user_consent_accept']);
  
  
      // Lưu thực thể người dùng.
    $ người dùng-> lưu;


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

    $values ​​= $form_state->getValue($pane_form['#parents']);
    
    $checked = $form_state->getValue($pane_form['user_consent_accept']['#default_value']);
 
    $user = Người dùng::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']);  
  $ người dùng-> lưu;
   */  
  } 
}
Hodba Khalaf avatar
lá cờ eg
bạn cần xóa ->id() vì nó gọi ID người dùng. chỉ dùng. "$user = Người dùng::load(\Drupal::currentUser());"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.