Membuat kisi produk Commerce yang direferensikan

Aug 18 2020

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

1 RyanSzrama Aug 21 2020 at 01:38

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: