pluginy magento 2

Magento, jako jedna z najpopularniejszych platform e-commerce na świecie, oferuje zaawansowane możliwości dostosowywania i rozszerzania funkcjonalności swoich sklepów internetowych. Jednym z kluczowych mechanizmów, które pozwalają na elastyczność i rozszerzalność Magento, są pluginy. W tym artykule przyjrzymy się, czym są pluginy w Magento, jak działają i dlaczego są niezwykle przydatne.

Co to są pluginy w Magento?

Pluginy w Magento to mechanizm, który umożliwia wykonywanie własnego kodu przed lub po wywołaniu określonej funkcji (metody) w aplikacji. Pozwala to na modyfikację lub rozszerzenie zachowania funkcji bez konieczności modyfikowania jej oryginalnego kodu. 

Pluginy definiujemy w pliku etc/di.xml, jeśli zdefiniujemy plugin w danej przestrzeni to będzie on działał tylko tam np. tylko w strefie webapi.

Kiedy można używać pluginów?

Pluginy w Magento mają pewne ograniczenia i nie można ich używać w każdym przypadku. Oto kilka z nich:

  • Gdy metoda lub klasa ma specyfikator "final".
  • Gdy funkcja nie jest publiczna.
  • Gdy funkcja jest statyczna.
  • Na konstruktorach i destruktorach klas.
  • Jeśli funkcja jest typem wirtualnym.
  • Gdy obiekt ma zaimplementowany interfejs Magento\Framework\ObjectManager\NoninterceptableInterface.
  • Jeśli instancja obiektu jest utworzona przed wykonaniem Magento\Framework\Interception.

W Magento 2 istnieją trzy główne rodzaje pluginów:

  • Before (Przed)
    Pluginy typu "before" pozwalają na wykonanie własnego kodu przed wywołaniem określonej funkcji. Mogą one modyfikować argumenty przekazywane do funkcji lub nawet uniemożliwiać wykonanie funkcji, jeśli to konieczne. Są używane, gdy chcemy wprowadzić zmiany lub walidacje przed wykonaniem konkretnej operacji.
  • Around (Wokół)
    Pluginy typu "around" pozwalają na kontrolowanie wywołania funkcji. Oznacza to, że można wykonać własny kod przed i po wykonaniu funkcji, a nawet całkowicie zastąpić funkcję swoją własną implementacją. Jest to przydatne, gdy potrzebujemy całkowitej kontroli nad zachowaniem funkcji.
  • After (Po)
    Pluginy typu "after" pozwalają na wykonanie własnego kodu po zakończeniu określonej funkcji. Są używane, gdy chcemy podejmować działania po wykonaniu danej operacji, takie jak modyfikacja wyniku funkcji lub wykonanie dodatkowych operacji na podstawie wyniku.

A oto kilka przykładów zastosowania pluginów:

W znaczniku plugin można dopisywać atrybuty (są one nieobowiązkowe):

  • sortOrder - sterowanie kolejnością wykonywania pluginów. W pierwszej kolejności są wykonywane te, które nie mają zdefiniowanego sortOrder, następnie rosnąco po wartości podanej w atrybucie.
  • disabled - atrybut definiuje czy plugin jest włączony czy nie, zazwyczaj używany w konieczności wyłączenia pluginu

Pluginy mają specyficzną konwencję nazw. Nazwa rozpoczyna się od typu pluginu(before/around/after), a następnie dodawana jest nazwa właściwa funkcji której dotyczy. Zapis realizujemy zgodnie z zasadami camelCase np. beforeSave, aroundSave, afterSave.

Przykład pluginu before:

W tym przykładzie widzimy plugin który wykona się przed zapisem zamówienia. Pierwszy parametr ($subject) jest obligatoryjny, a kolejne parametry pojawiają się jeśli funkcja jest wykonywana z tym parametrem (mogą tu być wszystkie parametry z którymi wykonywana jest funkcja, w tym przypadku save).

Przykład pluginu around:

Widzimy tutaj klasyczny przykład pluginu typu around. Obligatoryjnymi zmiennymi są $subject i $proceed, kolejne atrybuty to parametry funkcji, którą śledzi plugin. Kluczowy w tym rodzaju pluginu jest parametr $proceed, który wyzwala bazową metodę. 

Przykład pluginu after:

W tym przykładzie zaprezentowany jest plugin, który wykona się po funkcji getTotals. Widzimy tutaj obok $subject dodatkowy parametr ($result). Przechowuje on wartość zwróconą w funkcji, dzięki temu możemy zmodyfikować np. zwracaną wartość funkcji. 

Podsumowanie

Podsumowując, pluginy stanowią niezwykle ważny element ekosystemu Magento, pozwalając na dostosowywanie, rozszerzanie i modyfikowanie funkcjonalności sklepów internetowych. Dzięki nim programiści mogą łatwo wprowadzać własne rozwiązania przed lub po istniejących operacjach, zwiększając elastyczność i efektywność platformy.  Wartość pluginów w Magento polega w głównej mierze na tym, że umożliwiają one niemal nieograniczone możliwości rozwoju i personalizacji sklepów.