Magento 2 - Come applicare Slick Slider al widget visualizzato di recente


11

Ho creato un codice ma il dispositivo di scorrimento non viene visualizzato nei prodotti visualizzati di recente.

Ecco il mio codice -

Ho scaricato js e css slick dal seguente link http://kenwheeler.github.io/slick/

Quindi ho fatto quanto segue -

Passo 1 -

Copiato slick.min.js e slick.js in

app / design / frontend / _YOUR_VENDOR _ / _ YOUR_THEME_ / web / js /

Passo 2 -

Creare il file requirejs-config.js in

app / design / frontend / _YOUR_VENDOR _ / _ YOUR_THEME_ / web /

con il seguente codice in requestjs-config.js

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

Passaggio 3:

Copiato slick.less e slick-theme.less in

app / design / frontend / _YOUR_VENDOR _ / _ YOUR_THEME_ / web / css / source /

Passaggio 4:

Svuota la cache e distribuisci i file

Passaggio 5:

Creato views_grid.phtml in

app / design / frontend / _YOUR_VENDOR_ / YOUR_THEME / Magento_Reports / view / frontend / templates / widget di / visto / contenuti

con il seguente codice -

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

Passaggio 6:

Svuota la cache e distribuisci nuovamente i file

Ma il dispositivo di scorrimento non viene ancora visualizzato per i prodotti visualizzati di recente in frontend

Aiutatemi nella correzione del codice o nella creazione di un modulo per mostrare il prodotto visualizzato di recente con il cursore scorrevole :)


L'hai mai capito? Attualmente sto provando la stessa cosa. Da quello che posso dire penso che il widget si carichi dopo l'esecuzione del mio javascript. Ho provato a racchiudere il mio codice in un listener di modifica dei documenti, ma non sembra neanche aiutare.
Jim,

Sto anche cercando di applicare il cursore scorrevole nel mio magento. Ho fatto riferimento a molti documenti, tutti sono posizionati a scorrimento nel tema. Sto cercando di inserirlo nel mio modulo personalizzato. Ne hai idea?
Siranjeevi KS,

Risposte:


3

È necessario correggere il passaggio 2 apportare come di seguito, mantenere il file requestjs-config.js nella radice del tema anziché nella cartella Web.

Creare il file requirejs-config.js in

app/design/frontend/_YOUR_VENDOR_/_YOUR_THEME_/

con il seguente codice in requestjs-config.js

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

Correre

php bin / magento setup: upgrade

php bin / magento setup: static-content: deploy


Ciao Rakesh, ho provato a mettere il requestjs-config.js nella radice del tema anziché nella cartella web, ma il dispositivo di scorrimento non viene ancora visualizzato.
Vinay,

2

Usa sotto il codice:

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

Ciao Ronak, anche questo codice non funziona. Ho implicato e testato.
Vinay,

hai dato un nome di classe errato controllalo!
Ronak Chauhan,

Ciao Ronak, ho verificato con il codice sopra ".widget -iew-grid" e ".widget -iew" queste due classi, Still Slider non viene mostrato. JS è caricato correttamente injsjs-config.js
Vinay,

Ciao Ronak Ho provato aggiungendo molte altre classi e ci ho messo tutto il mio ultimo giorno ma ancora non funziona. Potresti suggerire la classe corretta per far funzionare il dispositivo di scorrimento con i prodotti visualizzati di recente.
Vinay,

1

requirejs-config.js dovrebbe essere come sotto

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

1

Nel caso in cui qualcun altro dovesse farlo, ecco cosa ho fatto per Magento 2.3.2. Il widget visualizzato di recente viene aggiunto tramite knockout, che si attiva dopo tutti gli altri javascript. Quindi per applicare slick ho dovuto usare la rilegatura personalizzata "afterRender" .

Una volta ho scoperto quale modello knockout e viewmodel js recentemente visto i prodotti utilizzati è stato piuttosto semplice. Ecco il mio codice:

Copia vendor/magento/module-catalog/view/base/web/js/product/list/listing.jssul tuo tema come app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/web/js/product/list/listing.js

Assicurati che jquery / slick sia aggiunto nella parte superiore del file di script, in questo modo (questo presuppone che tu li abbia già aggiunti a request-config.js):

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

Aggiungi una nuova funzione in questo modo:

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

Ora copia il modello HTML knockout sul tuo tema. Copia /vendor/magento/module-catalog/view/base/web/template/product/list/listing.htmlsu app/design/frontend/[Vendor]/[Theme]/Magento_Catalog/web/template/product/list/listing.htmlHo aggiunto un nuovo Div, ma non sono sicuro che tu debba farlo. Ho aggiunto questo:

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

Prima dell'ultima chiusura div. Spero che aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.