Magento 2 - Cách áp dụng Slick Slider cho Widget được xem gần đây


10

Tôi đã tạo một mã nhưng thanh trượt không hiển thị trong các sản phẩm được xem gần đây.

Đây là mã của tôi -

Tôi đã tải xuống js và css slick từ liên kết sau http://kenwheeler.github.io/slick/

Sau đó, tôi đã làm như sau -

Bước 1 -

Sao chép slick.min.js và slick.js trong

ứng dụng / thiết kế / frontend / _YOUR_VENDOR _ / _ Your_THEME_ / web / js /

Bước 2 -

Tạo tập tin allowjs-config.js trong

ứng dụng / thiết kế / frontend / _YOUR_VENDOR _ / _ Your_THEME_ / web /

với đoạn mã sau trong notifyjs-config.js

    var config = {
    paths: {
        slick:        'js/slick'
    },
    shim: {
        slick: {
            deps: ['jquery']
        }
    }
};

Bước 3 -

Sao chép slick.less và slick-theme.less trong

ứng dụng / thiết kế / frontend / _YOUR_VENDOR _ / _ Your_THEME_ / web / css / source /

Bước 4 -

Xóa bộ nhớ cache và triển khai tệp

Bước 5 -

Đã tạo xem_grid.phtml trong

ứng dụng / thiết kế / frontend / _YOUR_VENDOR_ / YOU_THEME / Magento_Reports / view / frontend / samples / widget / xem / nội dung

với đoạn mã sau -

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

?>
<?php
/**
 * @var $block \Magento\Reports\Block\Product\Viewed
 */
?>
<?php
if ($exist = ($block->getRecentlyViewedProducts() && $block->getRecentlyViewedProducts()->getSize())) {
    $type = 'widget-viewed';
    $mode = 'grid';

    $type = $type . '-' . $mode;

    $image = 'recently_viewed_products_grid_content_widget';
    $title = __('Recently Viewed');
    $items = $block->getRecentlyViewedProducts();

    $showWishlist = true;
    $showCompare = true;
    $showCart = true;
    $rating = 'short';
    $description = ($mode == 'list') ? true : false;
}
?>
<?php if ($exist):?>
    <div class="block widget block-viewed-products-<?= /* @escapeNotVerified */ $mode ?>">
        <div class="block-title">
            <strong role="heading" aria-level="2"><?= /* @escapeNotVerified */ $title ?></strong>
        </div>
        <div class="block-content">
            <?= /* @escapeNotVerified */ '<!-- ' . $image . '-->' ?>
            <div class="products-<?= /* @escapeNotVerified */ $mode ?> <?= /* @escapeNotVerified */ $mode ?>">
                <ol class="product-items <?= /* @escapeNotVerified */ $type ?>">
                    <?php $iterator = 1; ?>
                    <?php foreach ($items as $_item): ?>
                        <?= /* @escapeNotVerified */ ($iterator++ == 1) ? '<li class="product-item">' : '</li><li class="product-item">' ?>
                        <div class="product-item-info">
                            <a href="<?= /* @escapeNotVerified */ $block->getProductUrl($_item) ?>" class="product-item-photo">
                                <?= $block->getImage($_item, $image)->toHtml() ?>
                            </a>
                            <div class="product-item-details">
                                <strong class="product-item-name">
                                    <a title="<?= $block->escapeHtml($_item->getName()) ?>"
                                       href="<?= /* @escapeNotVerified */ $block->getProductUrl($_item) ?>" class="product-item-link">
                                        <?= $block->escapeHtml($_item->getName()) ?>
                                    </a>
                                </strong>
                                <?php /* @escapeNotVerified */ echo $block->getProductPriceHtml(
                                    $_item,
                                    \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE,
                                    \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST,
                                    [
                                        'price_id_suffix' => '-' . $type
                                    ]
                                ) ?>
                                <?php if ($rating): ?>
                                    <?= $block->getReviewsSummaryHtml($_item, $rating) ?>
                                <?php endif; ?>
                                <?php if ($showWishlist || $showCompare || $showCart): ?>
                                    <div class="product-item-actions">
                                        <?php if ($showCart): ?>
                                            <div class="actions-primary">
                                                <?php if ($_item->isSaleable()): ?>
                                                    <?php if ($_item->getTypeInstance()->hasRequiredOptions($_item)): ?>
                                                        <button class="action tocart primary"
                                                                data-mage-init='{"redirectUrl": {"url": "<?= /* @escapeNotVerified */ $block->getAddToCartUrl($_item) ?>"}}'
                                                                type="button" title="<?= /* @escapeNotVerified */ __('Add to Cart') ?>">
                                                            <span><?= /* @escapeNotVerified */ __('Add to Cart') ?></span>
                                                        </button>
                                                    <?php else: ?>
                                                        <?php
                                                            $postDataHelper = $this->helper('Magento\Framework\Data\Helper\PostHelper');
                                                            $postData = $postDataHelper->getPostData($block->getAddToCartUrl($_item), ['product' => $_item->getEntityId()])
                                                        ?>
                                                        <button class="action tocart primary"
                                                                data-post='<?= /* @escapeNotVerified */ $postData ?>'
                                                                type="button" title="<?= /* @escapeNotVerified */ __('Add to Cart') ?>">
                                                            <span><?= /* @escapeNotVerified */ __('Add to Cart') ?></span>
                                                        </button>
                                                    <?php endif; ?>
                                                <?php else: ?>
                                                    <?php if ($_item->getIsSalable()): ?>
                                                        <div class="stock available"><span><?= /* @escapeNotVerified */ __('In stock') ?></span></div>
                                                    <?php else: ?>
                                                        <div class="stock unavailable"><span><?= /* @escapeNotVerified */ __('Out of stock') ?></span></div>
                                                    <?php endif; ?>
                                                <?php endif; ?>
                                            </div>
                                        <?php endif; ?>
                                        <?php if ($showWishlist || $showCompare): ?>
                                            <div class="actions-secondary" data-role="add-to-links">
                                                <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?>
                                                    <a href="#"
                                                       class="action towishlist" data-action="add-to-wishlist"
                                                       data-post='<?= /* @escapeNotVerified */ $block->getAddToWishlistParams($_item) ?>'
                                                       title="<?= /* @escapeNotVerified */ __('Add to Wish List') ?>">
                                                        <span><?= /* @escapeNotVerified */ __('Add to Wish List') ?></span>
                                                    </a>
                                                <?php endif; ?>
                                                <?php if ($block->getAddToCompareUrl() && $showCompare): ?>
                                                    <?php $compareHelper = $this->helper('Magento\Catalog\Helper\Product\Compare');?>
                                                    <a href="#" class="action tocompare"
                                                       data-post='<?= /* @escapeNotVerified */ $compareHelper->getPostDataParams($_item) ?>'
                                                       title="<?= /* @escapeNotVerified */ __('Add to Compare') ?>">
                                                        <span><?= /* @escapeNotVerified */ __('Add to Compare') ?></span>
                                                    </a>
                                                <?php endif; ?>
                                            </div>
                                        <?php endif; ?>
                                    </div>
                                <?php endif; ?>
                            </div>
                        </div>
                        <?= ($iterator == count($items)+1) ? '</li>' : '' ?>
                    <?php endforeach ?>
                </ol>
            </div>
            <?= $block->getPagerHtml() ?>
        </div>
    </div>

<script>
    require([
        'jquery',
        'slick'
    ], function ($) {
        jQuery(document).ready(function () {
            jQuery(".widget-viewed").slick({
                dots: true,
                infinite: true,
                speed: 300,
                slidesToShow: 4,
                slidesToScroll: 4,
                responsive: [
                    {
                        breakpoint: 1280,
                        settings: {
                            slidesToShow: 3,
                            slidesToScroll: 3
                        }
                    },
                    {
                        breakpoint: 768,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 2
                        }
                    },
                    {
                        breakpoint: 600,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    }
                ]
            });
        });
    });
</script>   

<?php endif;?>

Bước 6 -

Xóa bộ nhớ cache và triển khai các tệp một lần nữa

Nhưng thanh trượt vẫn không hiển thị cho các sản phẩm được xem gần đây ở lối vào

Xin hãy giúp tôi sửa mã hoặc tạo một mô-đun để hiển thị sản phẩm được xem gần đây với thanh trượt trơn tru :)


Bạn đã bao giờ con số này ra? Tôi hiện đang cố gắng điều tương tự. Từ những gì tôi có thể nói tôi nghĩ rằng widget tải sau khi javascript của tôi đã được thực thi. Tôi đã cố gắng bọc mã của mình vào một trình lắng nghe thay đổi tài liệu nhưng điều đó dường như cũng không giúp được gì.
Jim

Câu trả lời:


3

Bạn cần sửa bước 2 của bạn như dưới đây, Giữ tập tin allowjs-config.js trong thư mục gốc của chủ đề thay vì thư mục web.

Tạo tập tin allowjs-config.js trong

app/design/frontend/_YOUR_VENDOR_/_YOUR_THEME_/

với đoạn mã sau trong notifyjs-config.js

 var config = {
    paths: {
        slick:        'js/slick'
    },
    shim: {
        slick: {
            deps: ['jquery']
        }
    }
};

Chạy

Thiết lập php bin / magento: nâng cấp

Thiết lập php bin / magento: static-content: triển khai


Xin chào Rakesh Tôi đã cố gắng đặt các tệp certjs-config.js trong thư mục gốc của chủ đề thay vì thư mục web, nhưng thanh trượt vẫn không hiển thị.
Vinay

2

Sử dụng mã dưới đây:

<script>
    require([
        'jquery',
        'slick'
    ], function ($) {
        $(document).ready(function () {
            $(".widget-viewed-grid").slick({
                dots: true,
                infinite: true,
                speed: 300,
                slidesToShow: 4,
                slidesToScroll: 4,
                responsive: [
                    {
                        breakpoint: 1280,
                        settings: {
                            slidesToShow: 3,
                            slidesToScroll: 3
                        }
                    },
                    {
                        breakpoint: 768,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 2
                        }
                    },
                    {
                        breakpoint: 600,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    }
                ]
            });
        });
    });
</script>   

Xin chào Ronak, mã này cũng không hoạt động. Tôi đã ngụ ý và thử nghiệm.
Vinay

bạn đã cho sai tên lớp kiểm tra nó!
Ronak Chauhan

Xin chào Ronak, tôi đã kiểm tra với đoạn mã trên ".widget-view-Grid" và ".widget-view" hai lớp này, Still Slider không hiển thị. JS được tải chính xác trong certjs-config.js
Vinay

Xin chào Ronak Đã thử bằng cách thêm nhiều lớp khác và tôi đã mất cả ngày hôm qua nhưng nó vẫn không chạy. Bạn có thể vui lòng đề xuất lớp chính xác để làm cho thanh trượt hoạt động với các Sản phẩm được xem gần đây.
Vinay

1

requirejs-config.js nên như dưới đây

var config = {
    paths: {
        slick: 'js/slick.min'
    },
    shim: {
        slick: {
            deps: ['jquery']
        }
    }
};

1

Trong trường hợp bất cứ ai khác cần phải làm điều này, đây là những gì tôi đã làm cho Magento 2.3.2. Tiện ích được xem gần đây được thêm thông qua loại trực tiếp, sẽ kích hoạt sau tất cả các javascript khác. Vì vậy, để áp dụng khéo léo, tôi đã phải sử dụng ràng buộc tùy chỉnh "afterRender" .

Khi tôi tìm thấy mẫu loại trực tiếp và viewmodel js, các sản phẩm đã xem gần đây đã sử dụng, nó khá đơn giản. Đây là mã của tôi:

Sao chép vendor/magento/module-catalog/view/base/web/js/product/list/listing.jsvào chủ đề của bạn như app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/web/js/product/list/listing.js

Hãy chắc chắn rằng jquery / slick được thêm vào đầu tập tin script, như vậy (điều này giả sử bạn đã thêm chúng vào request-config.js):

define([
    'ko',
    'underscore',
    'Magento_Ui/js/grid/listing',
    'jquery',
    'slick'
], function (ko, _, Listing, $) {

Thêm một chức năng mới như vậy:

pdpRvSlickInit: function(){
        $('.block-viewed-products-grid .product-items').slick({
            dots: false,
            infinite: true,
            speed: 300,
            slidesToShow: 3,
            slidesToScroll: 3,
            responsive: [
                {
                    breakpoint: 960,
                    settings: {
                        slidesToShow: 2,
                        slidesToScroll: 2
                    }
                }
            ]
        });
    }

Bây giờ sao chép mẫu HTML loại trực tiếp vào chủ đề của bạn. Sao chép /vendor/magento/module-catalog/view/base/web/template/product/list/listing.htmlvào app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/web/template/product/list/listing.htmlTôi đã thêm một Div mới, nhưng tôi không chắc bạn cần phải làm điều đó. Tôi đã thêm điều này:

<div class="clear" data-bind="afterRender: pdpRvSlickInit"></div>

Trước khi div cuối cùng kết thúc. Mong rằng sẽ giúp.

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.