Criação de uma grade de produtos comerciais referenciados

Aug 18 2020

Estou usando o Drupal 7 junto com o Commerce 1.x e criei um tipo de conteúdo que possui um campo de referência para entidades de produtos comerciais.

E agora eu gostaria de renderizar uma grade de produtos referenciados, isto é, adicionar ao formulário dedicado ao carrinho para cada produto na página do nó.

Pelo menos até agora parece uma tarefa impossível de fazer. Eu tentei com Views, variável de modelo de formulário personalizado etc., mas sempre dá erros como

Aviso: Índice indefinido: #options in function form_process_radios () (linha 3188

O parâmetro deve ser um array ou um objeto que implemente Countable na função form_process_radios () (rivi 3188

De alguma forma, está sempre esperando um elemento de rádio com opções (que é a formatação padrão) para vários produtos. No entanto, não é isso que eu quero e tentei defini-lo como um elemento oculto. Também consigo ver os formulários mas gostaria de me livrar dos erros e criar isto "pelo livro".

<?php
function mymodule_preprocess_entity(&$variables) { $variables['add_to_cart_form'] = '';

  if ($variables['elements']['#entity_type'] == 'commerce_product'){ $item = $variables['elements']['#entity']; if (empty($item->product_id)) {
        return;
      }

      $form_id = commerce_cart_add_to_cart_form_id([$item->product_id]);

      $line_item = commerce_product_line_item_new($item, 1, 0, [], 'custom_owner');
      $line_item->commerce_product = $item->product_id;
      $line_item->data['context']['product_ids'] = array($item->product_id);
      $line_item->data['context']['show_single_product_attributes'] = 1; $product_form = drupal_get_form($form_id, $line_item);

      // Trying to change from radio element to hidden
      $product_form['product_id']['#type'] = 'hidden'; unset($product_form['product_id']['#theme_wrappers']);
      unset($product_form['product_id']['#process']); $form_markup = drupal_render($formp); $variables['add_to_cart_form'] = array('#markup' => $form_markup);


  }

}?>

Respostas

1 RyanSzrama Aug 21 2020 at 01:38

Isso é possível pronto para uso, sem qualquer código personalizado, apenas visualizações simples. O truque é fazer a Visualização com base no conteúdo de qualquer tipo de nó e definir um relacionamento do nó para os produtos referenciados por seu campo de referência de produto. Depois de ter os campos do produto disponíveis para a Visualização, o Commerce 1.x fornece um campo de formulário Adicionar ao Carrinho por variação para cair na Visualização.

Eu criei um exemplo de visualização que faz isso, colocando-o em um bloco nas páginas de nó do meu tipo de nó de exibição de produto. Ele usa um filtro contextual para determinar o ID do nó do URL, une-se aos produtos por meio do relacionamento que descrevi acima e, em seguida, mostra o título do produto, o preço e o formulário Adicionar ao carrinho em uma grade:

Observe que os itens de linha adicionados por meio dos formulários Adicionar ao carrinho do produto não mantêm o contexto do nó; é por isso que "Produto Três" é renderizado como um link em meu carrinho, mas Dois e Um não. Ele iria levá código personalizado para garantir que essas formas têm o contexto apropriado neste momento, mas isso é outra questão.

Caso você seja um aprendiz visual, aqui está a visão que construí para fazer este trabalho: