Wykorzystanie helperów w Magento, w celu redukcji liczby zapytań do bazy danych

Helpery w Magento posiadają jedną unikalną cechę – są singletonami. Oznacza to, że każde wywołanie metody Mage::helper() – oczywiście z takim samym identyfikatorem klasy, np. Mage::helper(‘creativevariants’) – zwróci nam tę samą instancję obiektu (w tym przypadku Creativestyle_Variants_Helper_Data). Można to wykorzystać do wygodnego przechowywania raz pobranych danych z bazy, w celu późniejszego wykorzystania w dowolnym miejscu skryptu. Metoda ta jest całkowicie przezroczysta dla użytkownika helpera – dane są pobierane z bazy, przy pierwszym użyciu i zapamiętywane wewnątrz obiektu.

Załóżmy, że chcemy w każdym miejscu skryptu mieć dostęp do powiazań pomiędzy produktami konfigurowalnymi i prostymi (configurable and simple products).  Można do tego napisać prosty helper:

Jak widać, w helperze przechowujemy dwie tablice – $parentId oraz $simpleIds, przechowujące odpowiednio identyfikatory rodziców oraz listę powiązanych produktów. Mając tego rodzaju helpera, można w dowolnym miejscu skryptu (zarówno w plikach *.php jak i w *.phtml) używać jego publicznych metod – zapytanie do bazy zostanie przetworzone tylko w momencie pierwszego użycia metody, każde następne wywołanie zwróci dane przechowywane w helperze.

Przykład: Iteracja po kolekcji.

Zapytanie zostanie wysłane tylko raz, przy pierwszym przebiegu pętli. Co więcej – jeżeli w jakimkolwiek innym pliku, w ramach tego samego ładowania strony, jedna z metod tego helpera została już wcześniej wywołana – w powyższej pętli nie będzie ani jednego zapytania do bazy danych. Jak już wspomniano wcześniej, helper w Magento jest singletonem i za każdym razem Mage::helper() zwraca tę samą instancję obiektu (oczywiście z tym samym identyfikatorem helpera!).

Podany przykład dotyczy relacji między produktami prostymi i konfigurowalnymi, metodę tę można użyć do dowolnych danych – na przykład pobierania produktów powiązanych (related products, upsell & crossell products), opcji atrybutów itp.

UWAGA! – prezentowany kod pobiera wszystkie powiązania z tabeli jednocześnie. W przypadku bardzo dużej ilości powiązań między produktami w bazie danych należy sprawdzić czy jest dostępny wystarczający limit pamięci. Ponadto zastosowana metoda ma sens, gdy mamy w ramach jednego wykonania skryptu dużo produktów konfigurowalnych i dla nich często pobieramy połączone warianty.

Pełny kod modułu: Creativestyle_Variants.zip

pluswerk