Puncte:0

How to get access to a $form in hook_entity_view_display_alter?

drapel 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?

Puncte:0
drapel in

Ca regulă generală, dacă cârligul nu vă oferă obiectul de care aveți nevoie, înseamnă că cel mai probabil vă aflați în locul potrivit pentru a vă executa codul.

Având în vedere întrebarea dvs., cred că ar trebui să utilizați hook_form_alter cu $form_id === add_to_cart_form sau ceva apropiat de asta. (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21form.api.php/function/hook_form_alter/8.8.x)

Apoi poți face neasezat Acolo.

O practică mai bună ar fi să oferi #access = FALSE în loc să dezactiveze elementul $form['cantity']['#access] = FALSE;

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.