संदर्भित वाणिज्य उत्पादों का एक ग्रिड बनाना
मैं कॉमर्स 1.x के साथ ड्रुपल 7 का उपयोग कर रहा हूं और मैंने एक कंटेंट टाइप बनाया है जिसमें कॉमर्स प्रोडक्ट एंटिटीज के लिए रेफरेंस फील्ड है।
और अब मैं नोड पेज पर प्रत्येक उत्पाद के लिए संदर्भित उत्पादों की एक ग्रिड को समर्पित करना चाहता हूं अर्थात कार्ट फॉर्म में जोड़ना चाहता हूं।
कम से कम अभी तक यह एक असंभव कार्य जैसा लगता है। मैंने व्यूज, कस्टम फॉर्म टेम्प्लेट वैरिएबल आदि के साथ प्रयास किया है, लेकिन यह हमेशा की तरह त्रुटियां देता है
सूचना: अपरिभाषित सूचकांक: #options in function form_process_radios () (पंक्ति 3188)
पैरामीटर एक सरणी या एक ऑब्जेक्ट होना चाहिए जो फ़ंक्शन form_process_radios () में गणना योग्य है (rivi_45)
किसी भी तरह कई उत्पादों के लिए यह हमेशा एक रेडियो तत्व की उम्मीद करता है जिसमें विकल्प (जो डिफ़ॉल्ट स्वरूपण है)। हालाँकि, यह वह नहीं है जो मैं चाहता हूं और मैंने इसे छिपे हुए तत्व के रूप में स्थापित करने की कोशिश की है। मैं रूपों को भी देख सकता हूं लेकिन त्रुटियों से छुटकारा पाना चाहूंगा और इसे "पुस्तक द्वारा" बनाऊंगा।
<?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);
}
}?>
जवाब
यह किसी भी कस्टम कोड के बिना बॉक्स से बाहर संभव है, बस सादा दृश्य। ट्रिक यह है कि आपके नोड प्रकार के कंटेंट के आधार पर व्यू बनाएं और नोड से रिलेशनशिप से संबंधित उत्पादों के संदर्भ क्षेत्र के संबंध में सेट करें। एक बार जब आपके पास दृश्य के लिए उत्पाद फ़ील्ड उपलब्ध हो जाते हैं, तो वाणिज्य 1.x दृश्य में ड्रॉप करने के लिए प्रति-प्रकार Add to Cart प्रपत्र फ़ील्ड प्रदान करता है।
मैंने एक नमूना दृश्य बनाया जो ऐसा करता है, इसे अपने उत्पाद प्रदर्शन नोड प्रकार के नोड पृष्ठों पर एक ब्लॉक में रखकर। यह URL से नोड आईडी निर्धारित करने के लिए एक प्रासंगिक फिल्टर का उपयोग करता है, ऊपर वर्णित रिश्ते के माध्यम से उत्पादों से जुड़ता है, और फिर एक ग्रिड में उत्पाद शीर्षक, मूल्य और Add to Cart फॉर्म दिखाता है:
ध्यान दें कि उत्पाद के माध्यम से जोड़े गए लाइन आइटम कार्ट के रूपों में नोड के संदर्भ को बनाए नहीं रखते हैं; यही कारण है कि "उत्पाद तीन" को मेरी कार्ट में एक लिंक के रूप में प्रस्तुत किया गया है, लेकिन टू और वन नहीं हैं। यह सुनिश्चित करने के लिए कस्टम कोड लिया जाएगा कि इस फॉर्म में इस बिंदु पर उपयुक्त संदर्भ हो, लेकिन यह एक और सवाल है।
यदि आप एक दृश्य शिक्षार्थी हैं, तो यहां देखें कि मैंने यह काम करने के लिए निर्माण किया है: