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!
Nie, Magento 2 nie udostępnia takiej konfiguracji w panelu administracyjnym.
Tak, rozwiązanie działa we wszystkich wersjach Magento 2.
Dodaj komentarz