Moduł Omnibus dla Prestashop

Moduł Omnibus dla Prestashop

2023-01-14 5 przez zyxel

Niedawno weszła w życie ustawa Omnibus. Zapewne zastanawiacie się, który moduł jest najlepszy.

Ponieważ jest to pierwszy mój wpis, dlatego od razu wyjaśnię zasady. Chcę zachować neutralność i nie chcę nikogo faworyzować. Dlatego też, będę się starał wszystko umieszczać alfabetycznie, albo zgodnie z oceną (w przypadku podobnych ocen, alfabetycznie)

Czym jest w ogóle Omnibus. Jest to ustawa unijna, która ma na celu uporządkowanie kwestii cen. A raczej przeciwdziałanie tzw. sztucznym promocjom. Gdzie właściciel sklepu przed zrobieniem promocji, sztucznie zawyża cenę, aby obniżka wydawała się bardziej atrakcyjna.

Założenia dyrektywy Omnibus

  • W Polsce, Dyrektywa obowiązuje od 1 stycznia 2023
  • Dyrektywa omnibus ma na celu ukrócenie procederu zawyżania cen i wprowadzania sztucznych promocji.
  • Dyrektywa wymaga pokazania najniższej ceny produktu z ostatnich 30 dni przed wprowadzeniem promocji.
    • tzn. Jeśli dziś mamy 14 lutego, a promocja została wprowadzona 1 lutego, to sklep musi wyświetlać najniższą cenę z okresu od 1 stycznia do 31 stycznia.
  • Wymóg wyświetlania najniższej ceny dotyczy tylko produktów objętych promocją.
    tzn. Produkty nie objęte promocją mogą, ale nie muszą wyświetlać informacji o najniższej cenie.
  • Nie ma wymogu pokazywania historii ceny jako wykres, choć jest to funkcja niektórych modułów

Po przemyśleniu całej sprawy, nie będę tutaj rozważał kwestii tego jaka cena powinna być wyświetlona, a jaka nie. To zostawię prawnikom, bo to oni są za to odpowiedzialni. Ewentualnie pokażę tylko, jakie mają funkcje. I jak wygląda najniższa cena przy każdej funkcji.

Jaki jest najlepszy moduł Historii ceny dla Prestashop?

Nie odpowiem Wam, który jest najlepszy. W tym teście sprawdzamy tylko technologie użyte do stworzenia takiego modułu. Jego wydajność i kwestie technicznej.

Każdy z Was ma inne wymagania co do modułu, jego funkcji i estetyki etc. etc. Dlatego cały ten artykuł nie ma na celu pokazania, który jest najlepszy. Przybliżam w nim jedynie kwestie technicznej modułów, ponieważ większość właścicieli sklepów nie będzie w stanie przetestować tego samemu z 2 możliwych powodów: Brak wiedzy technicznej i/lub brak dostępu do modułów.

Nasi zawodnicy

Do tej pory miałem do czynienia jedynie (lub aż) z trzema modułami i ten wpis będzie o nich.

  • GreenMouse – Omniprice
  • SEIGI – Omnibus: Historia ceny na karcie produktu
  • X13 – Historia ceny na karcie produktu – dyrektywa Omnibus

Moduły których nie testowaliśmy, a które są

  • PrestaShow – sprawdzałem moduł na ich sklepie demo. Ale na żadne wdrożenie się nie zdecydowałem, bo nie potrafiłem wyświetlić na nim konkretnej informacji o cenie, a to jest wymagane przez ustawę.
  • Prestahelp.com – wiem, że jest, ale nie testowałem. Jak przetestujemy go w przyszłości, to postaram się dodać go do porównania.
  • Sporo innych firm oferuje, ale w dużej mierze są to oferty odsprzedaży lub instalacji na moduły GreenMouse/SEIGI/X13/Prestahelp

Najważniejsze funkcje modułów dyrektywy Omnibus

Zróbmy checklist’ę kryteriów oceny

  • Możliwość schowania informacji o cenie, jeśli nie ma promocji
    • Czyli, czy moduł ma opcję wyłączenia wyświetlania najniższej ceny w przypadku produktów nie objętych promocją.
  • Wyświetlanie najniższej ceny z 30 dni przed promocją
    • Jeśli produkt nie jest na promocji, to nie ma potrzeby wyświetlania jego najniższej ceny. Taki wymóg jest stawiany jedynie w momencie, w którym obowiązuje obniżka („cena przekreślona”)
  • Wykres historii ceny
    • Niektóre moduły oferują również wyświetlanie historii ceny w postaci grafu. Nie jest to wymagane przez ustawę.
    • Może być to tratowane jako dodatkowy atut przez klienta, zwiększający zaufanie do marki
    • Może to też umożliwić konkurencji lepsze śledzenie cen
  • Wielkość bazy danych

Platforma testowa i Metodologia

Prestashop 1.7.7.8. W sklepie jest 1000 produktów, a każdy produkt zawiera 42 kombinacje atrybutów (6 kolorów i 7 rozmiarów).

  • Test #1 – Cena w żadnym produkcie nie ulega zmianie przez cały miesiąc.
    Zestaw 113 produktów, każdy z kombinacjami. Ilość kombinacji: 1458.
    • Zestaw A – Cena produktu bazowego jest zawsze stała
    • Zestaw B – Cena produktu ulega zmianie codziennie, wpływ na każdą kombinację to 0zł
    • Zestaw C – Cena produktu ulega zmianie codziennie, wpływ na cenę dla każdego produktu to 1zł.
    • Zestaw D – Cena produktu ulega zmianie codziennie, wpływ na cenę kombinacji jest losowy.
  • Test #2 – Ile zajmuje indeksacja zadania CRON i jakie generuje obciążenie.
  • Test #3 – Poprawność wyświetlania danych
    • Test A – Wyświetlanie zaraz po dodaniu promocji
    • Test B – Sprawdzanie wyświetlania po kilku dniach promocji
  • Test #4 – Wpływ na spowolnienie strony .
    1000 produktów, każdy po 15 kombinacji, razem 15 000 kombinacji.
    • Zestaw A – Na podstawie testowego zestawu A
    • Zestaw D – Na podstawie testowego zestawu D

Wszystkie moduły działają dokładnie na tym samym zestawie danych. Na jednym sklepie zainstalowane są 3 moduły jednocześnie.

Wszystkie moduły są ustawione tak, aby zbierały jak największą ilość danych. Aby porównanie było jak najbardziej rzetelne.

Testy modułów historii ceny dla Prestashop

Test #1 – Waga bazy i ilość wpisów

Najpierw sprawdźmy, jak to wygląda na wykresach.

Waga bazy danych w KB – Im mniej, tym lepiej

Ilość wpisów w bazie danych – Im mniej, tym lepiej

W tym teście najlepiej wypada moduł od SEIGI. Najbardziej bazę danych obciąża moduł X13. Z tego co widziałem po wpisach, moduł od SEIGI nie zapisuje wszystkich danych.

Test #2 – Szybkość indeksacji CRON

Czas jaki działa zadanie CRON bardzo dobrze pokazuje ile operacji musi wykonać dany moduł, aby zindeksować wszystkie ceny.

OmniPrice i X13 mają identyczne wyniki (zapewne używają podobnej metody).
Moduł od SEIGI jest znacznie szybszy.

Zapewne jest to powiązane z tym, że moduł SEIGI zapisuje mniej do bazy danych.

Czas podany w sekundach

Test #3 – Poprawność wyświetlania historii cen

Chyba jeden z najważniejszych aspektów. Tzn poprawność działania modułu. Sprawdzimy tutaj, które moduły poprawnie wyświetlają cenę. tj. najniższą cenę na 30 dni przed wprowadzeniem promocji, zgodnie z deklaracjami producentów.

Tutaj wykonywałem zwiększanie cen tym samym sposobem co Test #1C i #1D. Symulując 50 dni używania modułu. Promocja jest zaplanowana na 40 dzień.

Najlepiej, zobaczcie sami. Promocje zaczynają się od 2 minuty filmu, więc można przewinąć.
Użyłem CSS do ostylowania która cena należy do którego modułu, dla lepszej czytelności.

Skrypty testujące

Metoda testowania polegała na przesuwaniu daty na serwerze i zmiany ceny każdego dnia, następnie na indeksacji ceny każdego dnia. Poniżej załączam skrypty, które mi w tym zadaniu pomagały.

date --set="2023-01-01 10:00:00"
php omnibus_price_increase.php
php modules/gm_omniprice/cron.php
php modules/seigipricehistory/cron.php action=saveAll
wget -O- "http://example.com/index.php?token=twojtokenbezpieczenstwa&action=index&fc=module&module=x13pricehistory&controller=cron&id_lang=1"

Powyższy skrypt należy uruchomić 50 razy, zmieniając za każdym razem datę o 1 dzień.
Promocję w sklepie, proszę ustawić tak, aby rozpoczęła się 40 dnia.

Skrypt do testów B

require_once __DIR__ .'/config/config.inc.php';
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product SET `price` = `price` + 1');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_shop SET `price` = `price` + 1');

Skrypt do testów C

require_once __DIR__ .'/config/config.inc.php';
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product SET `price` = `price` + 1');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_shop SET `price` = `price` + 1');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_attribute SET `price` = `price` + 1');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_attribute_shop SET `price` = `price` + 1');

Skrypt do testów D

require_once __DIR__ .'/config/config.inc.php';
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product SET `price` = `price` + 1');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_shop SET `price` = `price` + 1');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_attribute SET `price` = FLOOR( 1 + RAND( )  *3 )');
Db::getInstance()->query('UPDATE '._DB_PREFIX_.'product_attribute_shop SET `price` = FLOOR( 1 + RAND( )  *3 )');

Testy wykonywalem kilkukrotnie. Wersje na których były przeprowadzane testy:
X13 to 1.3.0 , SEIGI to 1.4.1 i OmniPrice 1.0.5

Jeśli masz dostęp do któregoś z modułów i masz ochotę również przetestować, to zachęcam do podzielenia się swoimi wynikami w komentarzu.