Zmiana limitu produktów crosssell w koszyku – Magento 2

W Magento 2 domyślnie w koszyku w sekcji crosssell wyświetlane są maksymalnie 4 produkty. W wielu sklepach to ograniczenie jest uciążliwe – szczególnie przy rozbudowanej ofercie.

Domyślny limit cross-sell w Magento 2

W standardowej instalacji Magento 2 limit produktów cross-sell w koszyku wynosi 4. Wartość ta jest na stałe zdefiniowana w module Magento_Checkout i nie może być zmieniona z poziomu panelu administracyjnego.

Gdzie zdefiniowany jest limit cross-sell

Limit zdefiniowany jest w module Magento_Checkout – w klasie Crosssell. Ścieżka do pliku: vendor/magento/module-checkout/Block/Cart/Crosssell.php.

Tak jak wspominaliśmy wyżej – Magento nie udostępnia do tego konfiguracji, dlatego jedynym poprawnym rozwiązaniem jest nadpisanie klasy poprzez własny moduł.

Zmiana limitu cross-sell poprzez własny moduł Magento 2

Potrzebne będą:

– plik rejestrujący preference (di.xml)

– plik nadpisujący limit

LionBrothers/CrosssellLimit/etc/frontend/di.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Checkout\Block\Cart\Crosssell" type="LionBrothers\CrosssellLimit\Block\Cart\Crosssell"/>
</config>

LionBrothers/CrosssellLimit/Block/Cart/Crosssell.php

<?php

namespace LionBrothers\CrosssellLimit\Block\Cart;

class Crosssell extends \Magento\Checkout\Block\Cart\Crosssell
{
    /**
     * Items quantity will be capped to this value
     *
     * @var int
     */
    protected $_maxItemCount = 8;
}

Trzeba pamiętać również o standardowych plikach każdego modułu – registration.php oraz module.xml.

Dlaczego używamy preference, a nie pluginu?

W tym przypadku limit produktów cross-sell jest ustawiony jako protected property, a nie metoda. Oznacza to, że nie możemy zmienić go za pomocą pluginu (before/after/around). Najprostszym rozwiązaniem (i zarazem dobrą praktyką) jest użycie preference i rozszerzenie oryginalnej klasy.

Masz pytania? Napisz komentarz!

Czy można zmienić limit wyświetlanych produktów crosssell z poziomu panelu administracyjnego?

Nie, Magento 2 nie udostępnia takiej konfiguracji w panelu administracyjnym.

Czy to działa w Magento 2.4.x?

Tak, rozwiązanie działa we wszystkich wersjach Magento 2.

Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *