Score:0

How to get access to a $form in hook_entity_view_display_alter?

ธง cn

In Drupal 9, I added a views_add_to_cart_form view mode to be able to render a product entity with only the Variations field formatted as add to cart form being displayed. That all works as expected, but I am trying to remove the quantity widget on the commerce add to cart form for that specific view display by using unset($form['quantity']);.

I am not sure if it is better to bring the view display information into a form_alter, or if it would be cleaner to get the form information in a hook_entity_view_display_alter.

I was trying something like this in the form alter, but felt like it was not at all the right way to go about it

$display = \Drupal::service('entity_display.repository')->getViewDisplay('commerce_product', 'simple_product', 'views_add_to_cart_form');
if (isset($display)) {
  unset($form['quantity']);
}

(I realize my if (isset($dsiplay)) { won't cut the mustard...)

It seems like it would be better to use hook_entity_view_display_alter and get the necessary $form stuff in there:

/**
 * Implements hook_entity_view_display_alter().
 */
function MY_entity_view_display_alter(\Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, array $context) {
  if ($context['entity_type'] == 'commerce_product' && $context['view_mode'] == 'views_add_to_cart_form') {
    // Get access to the $form_id and unset($form['quantity']);
  }
}

So how do I get access to &$form, FormStateInterface &$form_state, $form_id stuff inside hook_entity_view_display_alter?

Score:0
ธง in

ตามกฎทั่วไป หาก hook ไม่มีวัตถุที่คุณต้องการ นั่นหมายความว่าคุณน่าจะอยู่ในตำแหน่งที่เหมาะสมในการดำเนินการโค้ดของคุณ

เมื่อพิจารณาจากคำถามของคุณ ฉันคิดว่าคุณควรจะใช้ hook_form_alter กับ $form_id === add_to_cart_form หรืออะไรใกล้เคียงนั้น (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21form.api.php/function/hook_form_alter/8.8.x)

จากนั้นคุณสามารถทำ ยกเลิกการตั้งค่า ที่นั่น.

การปฏิบัติที่ดีกว่าคือการให้ #การเข้าถึง = FALSE แทนที่จะยกเลิกการตั้งค่าองค์ประกอบ $form['quantity']['#access] = FALSE;

โพสต์คำตอบ

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