Creazione di una griglia di prodotti Commerce referenziati
Sto usando Drupal 7 insieme a Commerce 1.xe ho creato un tipo di contenuto che ha un campo di riferimento per le entità del prodotto Commerce.
E ora vorrei rendere una griglia di prodotti referenziati, cioè un modulo di aggiunta al carrello dedicato per ogni prodotto nella pagina del nodo.
Almeno finora sembra un compito impossibile da fare. Ho provato con le viste, la variabile del modello di modulo personalizzato, ecc., Ma dà sempre errori come
Avviso: indice non definito: #options nella funzione form_process_radios () (riga 3188
Il parametro deve essere un array o un oggetto che implementa Countable nella funzione form_process_radios () (rivi 3188
In qualche modo si aspetta sempre un elemento radio con opzioni (che è la formattazione predefinita) per più prodotti. Tuttavia, non è quello che voglio e ho provato a impostarlo come elemento nascosto. Posso anche vedere i moduli, ma vorrei sbarazzarmi degli errori e creare questo "da manuale".
<?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);
}
}?>
Risposte
Questo è possibile fuori dagli schemi senza alcun codice personalizzato, solo semplici visualizzazioni. Il trucco sta nel rendere la vista basata sul contenuto di qualunque sia il tuo tipo di nodo e impostare una relazione dal nodo ai prodotti a cui fa riferimento il suo campo di riferimento del prodotto. Una volta che i campi dei prodotti sono disponibili per la visualizzazione, Commerce 1.x fornisce un campo modulo Aggiungi al carrello per variazione da inserire nella visualizzazione.
Ho creato una vista di esempio che esegue questa operazione, inserendola in un blocco nelle pagine dei nodi del tipo di nodo di visualizzazione del mio prodotto. Utilizza un filtro contestuale per determinare l'ID nodo dall'URL, si unisce ai prodotti tramite la relazione che ho descritto sopra e quindi mostra il titolo del prodotto, il prezzo e il modulo Aggiungi al carrello in una griglia:

Tieni presente che gli elementi pubblicitari aggiunti tramite i moduli Aggiungi al carrello del prodotto non mantengono il contesto del nodo; ecco perché "Prodotto Tre" viene visualizzato come un collegamento nel mio carrello, ma Due e Uno non lo sono. Ci vorrebbe codice personalizzato per garantire che quei moduli abbiano il contesto appropriato a questo punto, ma questa è un'altra domanda.
Nel caso tu stia imparando visivamente, ecco la vista che ho costruito per farlo funzionare:
