Magento2 Ürün Listeleme - Ürün seçeneklerini göster


10

Şu anda yeni bir Magento 2 teması üzerinde çalışıyorum. Bu tema için, ürün listesindeki tüm ürün seçeneklerini (özel seçenekler ve yapılandırılabilir ürün biçimindeki seçenekler) göstermek istiyorum. Bu şekilde kullanıcı, sepetine hızla ürün ekleyebilir.

product.infoBloğu eklemeyi denedim catalog_category_view.xmlve o blok için ürünü ayarladım. Seçenekler her ürün için gösterilir, sorun gösterilen seçeneğin yalnızca ilk üründen olmasıdır. Yani diğer tüm ürünlerin bu seçenekleri var.

--- GÜNCELLEME ---

Ürün seçeneklerini göstermeyi başardım, ancak fiyatlar güncellenmiyor. Birisi beni doğru yönde gösterebilir mi?

<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>

Ayrıca getJsonConfigişlevi kendi ListProduct sınıfımda uyguladım.


magento.stackexchange.com/questions/100801/… Özel seçenekler nasıl yapılır, sizi de düzenli seçeneklere yönlendirebilir. Kategori listesindeki sepete ekle: magento.stackexchange.com/a/125813/69
B00MER

kodunuzda value_index ve option_type_id nedir. value_index seçenek değerinin endeksidir ve option_type_id seçenek id
Sarvesh Tiwari

hata tanımsız değişkenler alıyorum $ customOptions kontrol edebilir ve beni geri alabilir miyim cevabınızı bekliyorum
Sarvesh Tiwari

Yanıtlar:


1

Magento_Swatch modülünü örnek olarak alabilirsiniz.

Blok Magento\Swatches\Block\Product\Renderer\Listing\Configurableadıyla bloğa eklenir category.product.type.details.renderers.

Burada olduğu gibi: https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/layout/catalog_category_view.xml

Şablon, renk örneklerinde kullanılan JS'yi başlatır: Magento_Swatches :: product / entry / renderer.phtml

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

Ve önemli olan her şey swatch JS'ye yapılır. https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js fonksiyonları gibi: _RenderControls, _RenderFormInput, _EventListener, _UpdatePriceve diğer. JS büyük görünüyor. Ancak AJAX ile getirilen renk örnekleri görüntü oluşturma etrafında çok fazla kod var. Muhtemelen ihtiyacınız yoktur, uygulanması daha kolaydır.

Burada, seçenekler (süper özellikler ve ilişkili ürünler) html etiketleri (renk örnekleri div'ler) oluşturulur ve manipüle edilir. Fiyat da burada ele alınmaktadır. Senin durumunda açılanlar olacak.

Yukarıdakilerin tümünü uygulamak için kendi modülünüzü yazmanız gerekir. Teorik olarak tüm ürün türlerinden (paket, gruplandırılmış, ...) herhangi bir seçenek ekleyebilirsiniz. Maliyet performanstır, çünkü seçenekler içeren bir kategori sayfasındaki her ürüne modellere daha fazla veri yüklemeniz gerekir.

Alternatif olarak, yapılandırılabilir / basit ilişkili ürünlerle görsel olmayan renk örneklerini (görüntüler olmadan) ayarlamayı deneyebilirsiniz.


0

Yapılandırılabilir ürünler için: " Metin Renk Örneği " özellik türünü ayarlamanız ve şablonu renk örneklerini (Magento 2'de varsayılan olarak) görüntüleyecek şekilde değiştirmeniz gerekir, istenirse bu, modül içindeki en basit veya işlev renk örneğini genişletir. seçeneğini seçin ve bu seçenek için yeni bir şablon oluşturun.


Bu en iyi seçenek gibi görünmüyor, güncellenmiş soruma bakın, sadece fiyatlar şu anda çalışmıyor.
Silvan

0

Soldaki Menü Listesi -> Özellik bölümüne git ve Ürün -> Ürün Ara seçeneğini tıklayın Bu özelliği göstermek ve tıklatmak zorundasınız -> Mağaza Özelliklerine Git -> Ve Değiştir -> Mağaza ve Katalog Sayfasındaki Katalog Sayfalarında Görünür Ürün Listesinde -> HAYIR - EVET.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.