Magento 2 – nadpisywanie corowych bloków

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