Membuat kisi produk Commerce yang direferensikan
Saya menggunakan Drupal 7 bersama dengan Commerce 1.x dan saya telah membuat jenis konten yang memiliki bidang referensi untuk entitas Produk Commerce.
Dan sekarang saya ingin membuat kisi produk yang direferensikan yaitu formulir tambahkan ke keranjang khusus untuk setiap produk pada halaman node.
Setidaknya sejauh ini sepertinya tugas yang mustahil dilakukan. Saya sudah mencoba dengan Tampilan, variabel templat formulir kustom, dll. Tetapi selalu memberikan kesalahan seperti
Perhatikan: Indeks yang tidak ditentukan: # opsi dalam fungsi form_process_radios () (baris 3188
Parameter harus berupa array atau objek yang mengimplementasikan Countable dalam fungsi form_process_radios () (rivi 3188
Entah bagaimana itu selalu mengharapkan elemen radio dengan opsi (yang merupakan format default) untuk beberapa produk. Namun, bukan itu yang saya inginkan dan saya telah mencoba menetapkannya sebagai elemen tersembunyi. Saya juga dapat melihat formulirnya tetapi ingin menyingkirkan kesalahan dan membuat ini "berdasarkan buku".
<?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);
}
}?>
Jawaban
Ini dimungkinkan di luar kotak tanpa kode khusus apa pun, hanya Tampilan biasa. Triknya adalah membuat Tampilan berdasarkan konten dari apa pun jenis node Anda dan mengatur hubungan dari node ke produk yang direferensikan oleh bidang referensi produknya. Setelah Anda memiliki bidang produk yang tersedia untuk Tampilan, Commerce 1.x menyediakan bidang formulir Tambahkan ke Keranjang per variasi untuk dimasukkan ke Tampilan.
Saya membuat Contoh Tampilan yang melakukan ini, menempatkannya di blok pada halaman node dari jenis node tampilan produk saya. Ini menggunakan filter kontekstual untuk menentukan ID node dari URL, bergabung dengan produk melalui hubungan yang saya jelaskan di atas, dan kemudian menunjukkan judul produk, harga, dan bentuk Tambahkan ke Keranjang dalam kisi:

Perhatikan bahwa item baris yang ditambahkan melalui formulir Tambahkan ke Keranjang produk tidak mempertahankan konteks node; itulah mengapa "Produk Tiga" ditampilkan sebagai tautan di keranjang saya tetapi Dua dan Satu tidak. Ini akan mengambil kode kustom untuk memastikan bentuk-bentuk memiliki konteks yang tepat pada saat ini, tapi itu pertanyaan lain.
Jika Anda seorang pelajar visual, inilah Tampilan yang saya buat untuk membuat ini berfungsi:
