Danh sách sản phẩm Magento2 - Hiển thị tùy chọn sản phẩm


10

Hiện tại tôi đang làm việc với một chủ đề Magento 2 mới. Đối với chủ đề này, tôi muốn hiển thị tất cả các tùy chọn sản phẩm (tùy chọn tùy chọn và tùy chọn hình thức sản phẩm có thể định cấu hình) trong danh sách sản phẩm. Bằng cách này, người dùng có thể nhanh chóng thêm sản phẩm vào giỏ hàng của mình.

Tôi đã thử thêm product.infokhối vào catalog_category_view.xmlvà đặt sản phẩm cho khối đó. Tùy chọn được hiển thị cho mọi sản phẩm, vấn đề là tùy chọn hiển thị chỉ từ sản phẩm đầu tiên. Vì vậy, tất cả các sản phẩm khác có tùy chọn này.

--- CẬP NHẬT ---

Tôi quản lý để hiển thị các tùy chọn sản phẩm, nhưng giá không được cập nhật. Ai đó có thể chỉ cho tôi đi đúng hướng?

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

Tôi cũng đã thực hiện getJsonConfigchức năng này trong lớp List sản phẩm của riêng tôi.


magento.stackexchange.com/questions/100801/ Khăn Cách làm cho các tùy chọn tùy chỉnh, cũng có thể dẫn bạn đến các tùy chọn thông thường. Thêm vào giỏ hàng trên danh sách danh mục: magento.stackexchange.com/a/125813/69
B00mer

value_index và option_type_id trong mã của bạn là gì. value_index là chỉ mục của giá trị tùy chọn và tùy chọn_type_id là id tùy chọn
Sarvesh Tiwari

Tôi đang nhận được lỗi không xác định biến $ customOptions bạn có thể kiểm tra và hoàn nguyên tôi không, tôi đang chờ phản hồi của bạn
Sarvesh Tiwari

Câu trả lời:


1

Bạn có thể lấy ví dụ mô-đun Magento_Swatch.

Khối Magento\Swatches\Block\Product\Renderer\Listing\Configurableđược thêm vào khối có tên category.product.type.details.renderers.

Như ở đây: https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/layout/catalog_carget_view.xml

Mẫu khởi tạo JS được sử dụng trên swatches: Magento_Swatches :: sản phẩm / list / renderer.phtml

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

Và mọi thứ quan trọng đều được thực hiện trong swatch JS. https://github.com/magento/magento2/blob/develop/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js Giống như chức năng: _RenderControls, _RenderFormInput, _EventListener, _UpdatePricevà khác. JS trông có vẻ lớn. Nhưng nó có rất nhiều mã xung quanh kết xuất hình ảnh swatches được tìm nạp thông qua AJAX. Bạn có thể không cần nó, nó dễ thực hiện hơn.

Tại đây, các tùy chọn (siêu thuộc tính và các sản phẩm được liên kết) thẻ html (div swatches) được tạo và thao tác. Giá được xử lý ở đây quá. Trong trường hợp của bạn, bạn sẽ có thả xuống.

Bạn cần phải viết mô-đun của riêng bạn để thực hiện tất cả ở trên. Về mặt lý thuyết, bạn có thể thêm bất kỳ tùy chọn nào từ tất cả các loại sản phẩm (gói, nhóm, ..). Chi phí là hiệu suất, vì bạn cần tải thêm dữ liệu vào các mô hình cho mọi sản phẩm trên trang danh mục có các tùy chọn.

Để thay thế, bạn có thể thử đặt thành các mẫu sản phẩm không liên quan đến cấu hình / đơn giản có thể cấu hình (không có hình ảnh).


0

Đối với các sản phẩm có thể định cấu hình: Bạn phải đặt loại thuộc tính " Text Swatch " và sửa đổi mẫu để hiển thị mẫu của swatch (Mặc định trên Magento 2), nếu muốn, đây là cách đơn giản nhất hoặc mở rộng chức năng swatch thông qua mô-đun, thêm một tính năng mới tùy chọn ở loại thuộc tính và tạo mẫu mới cho tùy chọn đó.


Đây dường như không phải là lựa chọn tốt nhất, hãy xem câu hỏi cập nhật của tôi, chỉ có giá không hoạt động vào lúc này.
Silvan

0

Trong Danh sách Menu bên trái -> Chuyển đến phần thuộc tính và nhấp vào Sản phẩm -> Tìm kiếm Tùy chọn sản phẩm mà bạn phải hiển thị & Nhấp vào thuộc tính đó -> Chuyển đến Thuộc tính cửa hàng -> Và thay đổi -> trong Hiển thị trên trang Danh mục trên Cửa hàng & Được sử dụng trong Danh sách sản phẩm -> KHÔNG thành CÓ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.