Başvurulan Ticaret ürünlerinden oluşan bir ızgara oluşturma

Aug 18 2020

Commerce 1.x ile birlikte Drupal 7 kullanıyorum ve Commerce Product varlıkları için referans alanı olan bir içerik türü oluşturdum.

Ve şimdi, referans ürünlerden oluşan bir ızgara oluşturmak istiyorum, yani düğüm sayfasındaki her ürün için sepete ekleme formu.

En azından şimdiye kadar yapılması imkansız bir görev gibi görünüyor. Görünümler, özel form şablonu değişkeni vb. İle denedim ama her zaman şu hatalar veriyor:

Uyarı: Tanımsız dizin: form_process_radios () (satır 3188) işlevindeki # seçenekler

Parametre, form_process_radios () (rivi 3188) işlevinde Sayılabilir'i uygulayan bir dizi veya nesne olmalıdır

Her nasılsa, birden çok ürün için her zaman seçeneklere sahip (varsayılan biçimlendirme olan) bir radyo öğesi bekler. Ancak, istediğim bu değil ve onu gizli öğe olarak ayarlamaya çalıştım. Formları da görebiliyorum ama hatalardan kurtulmak ve bunu "kitapla" yaratmak istiyorum.

<?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);


  }

}?>

Yanıtlar

1 RyanSzrama Aug 21 2020 at 01:38

Bu, herhangi bir özel kod olmadan kutudan çıkar çıkmaz mümkündür, sadece düz Görünümler. İşin püf noktası, Görünüm'ü düğüm türünüz ne olursa olsun içeriğe dayalı yapmak ve düğümden ürün referans alanı tarafından referans verilen ürünlere bir ilişki kurmaktır. Görünümde ürün alanlarına sahip olduğunuzda, Commerce 1.x, Görünüme bırakılmak üzere varyasyon başına bir Sepete Ekle form alanı sağlar.

Bunu yapan bir örnek View oluşturdum, onu ürün görüntüleme düğüm tipimin düğüm sayfalarına bir bloğa yerleştirdim. URL'den düğüm kimliğini belirlemek için bağlamsal bir filtre kullanır, yukarıda anlattığım ilişki yoluyla ürünlere katılır ve ardından ürün başlığını, fiyatını ve Sepete Ekle formunu bir ızgarada gösterir:

Ürün Sepete Ekle formları aracılığıyla eklenen satır öğelerinin düğümün bağlamını korumadığını unutmayın; bu yüzden "Ürün Üç" sepetimde bir bağlantı olarak gösteriliyor, ancak İki ve Bir değil. Bu olur o formlar bu noktada uygun bir bağlam sağlamak için özel kod alır, ama bu başka bir soru.

Görsel öğrenen biriyseniz, işte bunun işe yaraması için oluşturduğum Görünüm: