Page tree
Skip to end of metadata
Go to start of metadata

Budowanie rozszerzeń


Rozszerzenia budujemy poprzez dodawanie skryptów do plików znajdujących się w katalogu /ext, są nimi pliki:

- extend.php - uruchamiany przed inicjacją danych wykorzystywanych w kontrolerach

- extend_end.php - uruchamiany w momencie, w którym wszystkie dane wyjściowe są już przygotowane do wydruku

Pliki te nie są wymagane do uruchomienia sklepu, są one jednak w dużym stopniu wrażliwe, ponieważ spowodowanie błędu w którymś z nich powoduje niestabilne działanie sklepu na każdej podstronie. Nie wchodzą one także w skład aktualizacji, dlatego nigdy nie będą nadpisane.

 

Plik extend.php wykorzystywany jest głównie dla inicjacji niestandardowych klas (nadpisanie funkcji autoloadera), lub do wykonania przekierowania użytkownika (klienta sklepu) w momencie jego wejścia na stronę.

Przykładem może być np. zainicjowanie klasy Product poprzez zrobienie include pliku z definicją w/w klasy, dzięki czemu loader zobaczy, że w pamięci widnieje już taka klasa i nie będzie przeszukiwał struktury sklepu w poszukiwaniu wymienionej klasy. Mapowanie linków zaś może być pomocne np. w momencie potrzeby przeniesienia starego sklepu stworzonego na innej platformie, gdzie wykorzystywane są linki nie wpisujące się do pliku .htaccess cStore'a - w takim wypadku zanim cokolwiek zostanie zainicjowane zczytujemy taki link, porównujemy go do odpowiedniej tablicy (np. w bazie danych) i jak znajdziemy zgodność to możemy np. przenieść użytkownika już na stronę właściwą za pomocą php'owej funkcji header('Location: %s');

Budowanie modułów


Moduły w cStore posiadają następującą strukturę:

/modules/nazwamodulu/README - nie posiada rozszerzenia, plik z opisem modułu

/modules/nazwamodulu/config.php - plik z domyślną konfiguracją dla modułu

/modules/nazwamodulu/controller.php - zawiera klasę rozszerzającą 'controller' o nazwie takiej samej, jak nazwa modułu, obsługuje moduł od strony administracyjnej

/modules/nazwamodulu/view/ - folder zawierający widoki wykorzystywane przez kontrolerach

/modules/nazwamodulu/class/ - folder z klasami, które wczytywane są za pomocą autoloadera,

/modules/nazwamodulu/hooks/ - plik z funkcjami wykonywanymi przy określonych zdarzeniach,

/modules/nazwamodulu/sync - folder umowny, wykorzystywany do obsługi synchronizatorów z hurtowniami

 

Do obsługi moduły nie wymagane są wszystkie składniki samego modułu, ale są one niekiedy zależne od siebie. Oto definicja niektórych z zależności:

  • folder /sync jest folderem umownym, zazwyczaj wykonywany jest przez CRON, nie musi posiadać jakiegokolwiek połączenia z resztą plików modułu, może też być jedynym elementem modułu,
  • plik README potrzebny jest do zdefiniowania opisu modułu w ustawieniach uruchamiania modułów (admin: ustawienia/moduły), wymagany jest w przypadku utworzenia modułu zintegrowanego ze sklepem (kiedy użytkownik/admin chodzi po sklepie moduł oddziałuje na jego działanie),
  • plik config.php jest opcjonalny, nie jest wymagany do obsługi modułu, wymagany jest jednak dla utworzenia w nawigacji admina (w zakładce moduły) pozycji pozwalającej na wykorzystanie kontrollera,
  • controller.php nie jest plikiem wymaganym, pomaga jednak w utworzeniu modułu, który jest konfigurowalny przez panel admina,
  • katalog /view zazwyczaj wykorzystywany jest przez kontroler bądź skrypty z katalogu /hooks, w nim umieszczane są pliki obsługujące widoki modułów (rozdzielenie funkcjonalności od samego wydruku),
  • katalog /class wymagany jest tylko w przypadku, w którym tworzymy własne klasy dla modułu wykorzystywane przez resztę skryptów modułu,
  • katalog /hooks jest obligatoryjny w przypadku, w którym chcemy stworzyć obsługę modułu po stronie klienta sklepu, jest on sercem modułu i można w nim wykorzystać pliki z /class i /view.

Icon
UWAGA: aby moduł wpływał na działanie sklepu (prócz modułu synchronizatora z katalogiem /sync) wymagane jest jego uruchomienie w ustawieniach. W przeciwnym wypadku sklep nie będzie widział katalogu modułu i nie będzie dodawał plików z katalogów /hooks i /class.

 

Kliknij tutaj aby pobrać przykładowy moduł