Рейтинг: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?

Рейтинг:0
флаг in

Как правило, если хук не предоставляет вам нужный объект, это означает, что вы, скорее всего, находитесь в подходящем месте для выполнения своего кода.

Учитывая ваш вопрос, я думаю, вы должны использовать 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)

Затем вы можете сделать снят с охраны там.

Лучшей практикой было бы дать #доступ = ЛОЖЬ вместо сброса элемента $form['количество']['#access] = FALSE;

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.