Magento 2 - Как применить Slick Slider к недавно просмотренному виджету

11

Я создал код, но слайдер не отображается в недавно просмотренных продуктах.

Вот мой код -

Я скачал Slick JS и CSS по следующей ссылке http://kenwheeler.github.io/slick/

Тогда я сделал следующее -

Шаг 1 -

Скопировал slick.min.js и slick.js в

приложение / дизайн / интерфейс / _YOUR_VENDOR _ / _ YOUR_THEME_ / веб / JS /

Шаг 2 -

Создайте файл requirejs-config.js в

приложение / дизайн / интерфейс / _YOUR_VENDOR _ / _ YOUR_THEME_ / веб /

с помощью следующего кода в requirejs-config.js

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

Шаг 3 -

Скопированы slick.less и slick-theme.less в

приложение / дизайн / интерфейс / _YOUR_VENDOR _ / _ YOUR_THEME_ / веб / CSS / источник /

Шаг 4 -

Очистить кеш и развернуть файлы

Шаг 5 -

Создано просмотрено_grid.phtml в

приложение / дизайн / интерфейс / _YOUR_VENDOR_ / YOUR_THEME / Magento_Reports / просмотр / интерфейс / шаблоны / виджет / просмотреть / содержание

со следующим кодом -

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

Шаг 6 -

Очистить кеш и снова развернуть файлы

Но слайдер все еще не отображается для недавно просмотренных продуктов в веб-интерфейсе

Пожалуйста, помогите мне исправить код или создать модуль для отображения недавно просмотренного продукта с помощью скользящего слайдера :)

Виней
источник
Вы когда-нибудь понимали это? В настоящее время я пытаюсь сделать то же самое. Из того, что я могу сказать, я думаю, что виджет загружается после выполнения моего JavaScript. Я пытался обернуть мой код в прослушиватель изменений документа, но это тоже не помогло.
Джим
Я также пытаюсь применить скользкий слайдер в моем magento. Я ссылался на многие документы, они все размещены в теме. Я пытаюсь поместить его в свой пользовательский модуль. У вас есть идеи для этого?
Сирандживи К.С.

Ответы:

3

Вам нужно исправить ваш шаг 2, как показано ниже: сохраняйте файл requirejs-config.js в корне вашей темы вместо веб-папки.

Создайте файл requirejs-config.js в

app/design/frontend/_YOUR_VENDOR_/_YOUR_THEME_/

с помощью следующего кода в requirejs-config.js

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

Запустить

Настройка php bin / magento: обновление

php bin / magento setup: static-content: deploy

Ракеш Джесадия
источник
Привет, Ракеш! Я попытался поместить файл requirejs-config.js в корневой каталог темы вместо веб-папки, но слайдер все еще не отображается.
Vinay
2

Используйте код ниже:

<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>   
Ронак Чаухан
источник
Привет Ронак, этот код тоже не работает. Я подразумевал и проверял.
Vinay
Вы дали неправильное имя класса, проверьте это!
Ронак Чаухан
Привет, Ронак, я проверил приведенные выше коды ".widget-views-grid" и ".widget-views" этих двух классов, Still Slider не отображается. JS загружается в requirejs-config.js правильно
Vinay
Привет, Ронак. Попытался добавить много других уроков, и это заняло у меня весь последний день, но все еще не запущено. Не могли бы вы предложить правильный класс для работы слайдера с недавно просмотренными продуктами?
Vinay
1

requirejs-config.js должно быть как ниже

var config = {
    paths: {
        slick: 'js/slick.min'
    },
    shim: {
        slick: {
            deps: ['jquery']
        }
    }
};
Гоутам
источник
1

Если кому-то еще нужно сделать это, вот что я сделал для Magento 2.3.2. Виджет «Недавно просмотренные» добавляется с помощью нокаута, который запускается после всех остальных javascript. Поэтому, чтобы нанести пятно, мне пришлось использовать пользовательскую привязку afterRender .

Как только я обнаружил, какой шаблон нокаута и viewmodel js недавно просматривал используемые продукты, это было довольно просто. Вот мой код:

копия vendor/magento/module-catalog/view/base/web/js/product/list/listing.js в свою тему как app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/web/js/product/list/listing.js

Убедитесь, что jquery / slick добавлен в верхнюю часть файла скрипта, например, так (предполагается, что вы уже добавили их в require-config.js):

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

Добавьте новую функцию так:

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
                    }
                }
            ]
        });
    }

Теперь скопируйте шаблон HTML в вашу тему. Копировать /vendor/magento/module-catalog/view/base/web/template/product/list/listing.htmlвapp/design/frontend/[Vendor]/[Theme]/Magento_Catalog/web/template/product/list/listing.html Я добавил новый Div, но я не уверен, что вам нужно это сделать. Я добавил это:

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

До последнего закрытия дел. Надеюсь, это поможет.

Джим
источник