Jeżeli nasza templatka wymaga posiadania jakiejś logiki, najlepiej umieścić ją w tzw. blokach. Owszem zdarzają się takie bloki, które wyświetlają jedynie statyczny tekst, bądź javascript, jednak na ogół zawierają dynamiczne dane. Naturalnym jest więc, że w każdym sklepie ten sam corowy mechanizm może działać odrobinę inaczej – co wtedy? Wówczas będziemy musieli nadpisać blok i pozmieniać w nim coś. Nie jest to takie trudne jakby się wydawało 🙂
Powiedzmy, że chcemy nadpisać klasę \Magento\Catalog\Block\Product\ListProduct
znajdującą się w pliku:
vendor/magento/module-catalog/Block/Product/ListProduct.php
Aby tego dokonać oczywiście musimy mieć swój moduł i zakładam, że go już mamy 🙂 . Tworzeniu modułów i ich elementów, poświęcę osobne artykuły.
W katalogu root swojego modułu wykonujemy polecenie
mkdir -p Block/Product/
nano Block/Product/ListProduct.php
ctrl+o zapisujemy plik
W stworzonym pliku tworzymy swoją klasę
namespace <namespace>\<module>\Block\Product;
use \Magento\Catalog\Block\Product\ListProduct as ListProductBase;
class ListProduct extends ListProductBase
{
}
Następnie należy stworzyć plik di.xml
, w którym poinformujemy magento, że nasza klasa będzie rozszerzać corową w katalogu etc
naszego modułu:
<?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\Catalog\Block\Product\ListProduct" type="<namespace>\<module>\Block\Product\ListProduct" />
</config>
Następnie wykonujemy polecenie:
php bin/magento cache:clean
php bin/magento setup:di:compile
I włala 🙂 Prawda, że proste 😉 w następnym tipie pokażę jak nadpisać model