Magento2 उत्पाद लिस्टिंग - उत्पाद विकल्प दिखाएं


10

मैं इस समय एक नए Magento 2 विषय पर काम कर रहा हूँ। इस विषय के लिए मैं उत्पाद सूची में सभी उत्पाद विकल्प (कस्टम विकल्प और विकल्प रूप विन्यास उत्पाद) दिखाना चाहता हूं। इस तरह उपयोगकर्ता जल्दी से कार्ट में उत्पादों को जोड़ सकता है।

मैंने उस product.infoब्लॉक को जोड़ने का प्रयास किया catalog_category_view.xmlऔर उस ब्लॉक के लिए उत्पाद सेट किया। विकल्प हर उत्पाद के लिए दिखाए जाते हैं, समस्या यह है कि दिखाया गया विकल्प केवल पहले उत्पाद से है। इसलिए अन्य सभी उत्पादों में यह विकल्प हैं।

--- अपडेट करें ---

मैं उत्पाद विकल्प दिखाने में कामयाब रहा, लेकिन कीमतें अपडेट नहीं हुई हैं। क्या कोई मुझे सही दिशा दिखा सकता है?

<form id='product_addtocart_form_<?php echo $product->getId(); ?>' class="c-product__details__add-to-cart" data-role="tocart-form" action="<?php echo $postParams[ 'action' ]; ?>" method="post">
    <input type="hidden" name="product" value="<?php echo $postParams[ 'data' ][ 'product' ]; ?>">
    <input type="hidden" name="<?php echo Action::PARAM_NAME_URL_ENCODED; ?>" value="<?php echo $postParams[ 'data' ][ Action::PARAM_NAME_URL_ENCODED ]; ?>">
    <?php echo $block->getBlockHtml('formkey') ?>
    <div class="product-options-wrapper" id="product-options-wrapper" data-hasrequired="* Verplichte velden">
        <?php if($product->getTypeId() === 'configurable') : ?>
            <?php foreach($product->getTypeInstance()->getConfigurableAttributes($product) as $attribute) : ?>
                <div class="field">
                    <label class="label" for="select_<?php echo $attribute->getAttributeId(); ?>"><span><?php echo $attribute->getLabel() ?></span></label>
                    <?php $values = $attribute->getOptions(); ?>
                    <div class="control">
                        <select id="select_<?php echo $attribute->getAttributeId() ?>" name="options[<?php echo $attribute->getAttributeId() ?>]" class="product-option product-custom-option-<?php echo $attribute->getAttributeId() ?> admin__control-select" data-selector="options[<?php echo $attribute->getAttributeId() ?>]">
                            <?php foreach($values as $value): ?>

                                <option value="<?php echo $value['value_index'] ?>" price="2"><?php echo  $value['label'] ?></option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                </div>
            <?php endforeach; ?>
        <?php else : ?>
            <?php foreach($customOptions as $option): ?>
                <div class="field">
                    <label class="label" for="select_<?php echo $option->getId(); ?>"><span><?php echo $option->getTitle() ?></span></label>
                    <?php $values = $option->getValues(); ?>
                    <div class="control">
                        <select id="select_<?php echo $option->getId() ?>" data-id="<?php echo $product->getId() ?>" name="options[<?php echo $option->getId() ?>]" class="product-option product-custom-option-<?php echo $product->getId() ?> admin__control-select" data-selector="options[<?php echo $option->getId() ?>]">
                            <?php foreach($values as $value): ?>

                                <option value="<?php echo $value->getData('option_type_id') ?>" price="3"><?php echo $value->getTitle() ?></option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                </div>
            <?php endforeach; ?>
        <?php endif; ?>
        <script>
            require([
                'jquery',
                'Magento_Catalog/js/price-box'
            ], function($){
                var priceBoxes = $('[data-product-id=<?php echo $product->getId(); ?>]');

                priceBoxes = priceBoxes.filter(function(index, elem){
                    return !$(elem).find('.price-from').length;
                });
                var priceBox = priceBoxes.priceBox({'priceConfig': <?php /* @escapeNotVerified */ echo $block->getJsonConfig($product, $customOptions) ?>});

                $('.product-option').on('change', function() {
                    priceBox.trigger('updatePrice');
                });
            });
        </script>
    </div>
    <button type="submit" title="<?php echo $block->escapeHtml(__('Add to Cart')); ?>" class="action tocart primary im">
        <span><?php echo __('Add to cart'); ?></span>
    </button>
</form>

मैंने getJsonConfigअपने स्वयं के ListProduct वर्ग में फ़ंक्शन को भी लागू किया ।


magento.stackexchange.com/questions/100801/… कस्टम विकल्पों के लिए कैसे करें, आपको नियमित विकल्पों की ओर भी ले जा सकता है। श्रेणी सूची में कार्ट में जोड़ें: magento.stackexchange.com/a/125813/69
B00MER

आपके कोड में value_index और option_type_id क्या है। value_index विकल्प मूल्य का सूचकांक है और विकल्प_type_id विकल्प आईडी है
सर्वेश तिवारी

मुझे त्रुटि हो रही है अपरिभाषित चर $ customOptions आप देख सकते हैं और मुझे वापस कर सकते हैं मैं आपकी प्रतिक्रिया की प्रतीक्षा कर रहा हूं
सर्वेश तिवारी

जवाबों:


1

आप एक उदाहरण के रूप में मॉड्यूल Magento_Swatch ले सकते हैं।

Magento\Swatches\Block\Product\Renderer\Listing\Configurableब्लॉक को नाम के साथ ब्लॉक में जोड़ा जाता है category.product.type.details.renderers

यहाँ के रूप में: https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/layout/catalog_category_view.xml

टेम्प्लेट स्वैच पर उपयोग किए गए JS को इनिशिअलाइज़ करता है: Magento_Swatches :: उत्पाद / लिस्टिंग / रेंडरर.phtml

https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/templates/product/listing/renderer.phtml

और सब कुछ महत्वपूर्ण जे एस में किया जाता है। https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js कार्यों की तरह: _RenderControls, _RenderFormInput, _EventListener, _UpdatePriceऔर अन्य। जेएस बड़ा दिखता है। लेकिन इसमें बहुत सारे कोड हैं जो एवीएएक्स के माध्यम से प्राप्त की गई छवियों को रेंडर करने के आसपास हैं। आपको शायद इसकी आवश्यकता नहीं है, इसे लागू करना आसान है।

यहां, विकल्प (सुपर एट्रिब्यूट्स और संबंधित उत्पाद) HTML टैग्स (स्वैच डिव) बनाए जाते हैं और हेरफेर किए जाते हैं। यहां भी कीमत संभाली गई है। आपके मामले में आपके पास ड्रॉपडाउन होंगे।

उपरोक्त सभी को लागू करने के लिए आपको अपना स्वयं का मॉड्यूल लिखना होगा। सैद्धांतिक रूप से आप सभी प्रकार के उत्पादों (बंडल, समूहीकृत, ..) से कोई भी विकल्प जोड़ सकते हैं। लागत प्रदर्शन है, क्योंकि आपको किसी श्रेणी पृष्ठ पर प्रत्येक उत्पाद के मॉडल में अधिक डेटा लोड करने की आवश्यकता होती है जिसमें विकल्प होते हैं।

एक विकल्प के रूप में, आप कॉन्फ़िगर करने योग्य / सरल संबंधित उत्पादों को गैर-विज़ुअल स्वैच (छवियों के बिना) पर सेट करने का प्रयास कर सकते हैं।


0

विन्यास योग्य उत्पादों के लिए: आपको विशेषता प्रकार " टेक्स्ट स्वैच " सेट करना होगा और स्वैच दिखाने के लिए टेम्प्लेट को संशोधित करना होगा (यह मैगेंटो 2 पर डिफ़ॉल्ट है), यदि वांछित है, तो यह सबसे सरल है, या एक मॉड्यूल के माध्यम से कार्यक्षमता का विस्तार करें, जो एक नया जोड़ता है विकल्प के प्रकार पर विकल्प और उस विकल्प के लिए एक नया टेम्पलेट बनाएं।


यह सबसे अच्छा विकल्प नहीं लगता है, मेरे अपडेट किए गए प्रश्न को देखें, केवल कीमतें फिलहाल काम नहीं करती हैं।
सिल्वान

0

बाएं मेनू सूची में -> विशेषता अनुभाग पर जाएं और उत्पाद -> खोज उत्पाद विकल्प पर क्लिक करें जिसे आपको उस विशेषता को दिखाना और उस पर क्लिक करना है -> स्टोर के सामने गुण पर जाएं -> और परिवर्तन -> स्टोर के सामने सूची में पेज पर देखे और प्रयुक्त उत्पाद सूचीकरण में -> हाँ से नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.