My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
Manual  
Updated Mar 31, 2012 by pnapier...@gmail.com

1. Podręcznik

Postaram się opisać cały proces tworzenia własnych modułów, korzystania z bazy danych i innych zewnętrznych bibliotek.

1.1. Opis systemu

Na początku warto zapoznać się z opisem systemu NCMS'a. Wyjaśnię kilka spraw, z którymi trzeba się zapoznać przed przystąpieniem do pisania przy użyciu tego systemu. Implementacja jest zupełnie inna, przez co może być mało optymalna i profesjonalna, jednak starałem się wzorować na dobrze ocenianych bibliotekach i sposobach implementacji różnych rozwiązań. NCMS napisany został obiektowo, co nie znaczy, iż nie znajdziemy tam elementów programowania strukturalnego. Można to zauważyć już podczas analizowania pliku core.php, gdzie wykonywane są operacje pozwalające na start i załadowanie potrzebnych komponentów. Należy także pamiętać, iż niektóre klasy zostały napisane inaczej, niż jest to wskazane w tej dokumentacji z uwagi na brak późniejszego wykorzystywanie tego kodu w innych klasach.

Uwagi do ustawień projektu W katalogu Biblioteka istnieje plik konfiguracyjny, w którym należy zmienić dane dostępu do bazy danych oraz fizyczne położenie projektu na dysku. NCMS korzysta z pliku .htaccess do obsługi mod rewrite. Dlatego system może działać tylko wywołany bezpośrednio bez podawania katalogu - np. http://localhost (chyba, że odpowiednio go zmodyfikujemy)

1.2 Działanie systemu

Działanie systemu jest bardzo proste. System po wpisaniu adresu np. http://przykl.ad/strona1/podstrona wyszuka w bazie danych czy istnieje taka strona. Jak żądana strona nie istnieje to następuje przekierowanie na stronę błędu 404. Następnie system ładuje moduły, które połączone są z tą stroną. Zwraca uwagę na kolejność ich załączania i kolejno wykonuje kod w modułach. Na końcu renderuje szablony załączone do modułów i wstawia je w główny szablon strony.

1.2.1 Moduły - co to takiego?

Modułem można nazwać klasę, która odpowiedzialna będzie za dany blok na stronie www. Przykładowo może to być klasa odpowiedzialna za wyświetlenie wszystkich aktualności, a po podaniu parametru tylko tej konkretnej. Kolejnym modułem mogą być komentarze do aktualności. Moduł, jako używane przeze mnie pojęcie wykonuje czynności logiczne, oraz ładuje odpowiedni szablon do wyświetlenia wykonanych operacji. Modułu znajdują się w katalogu Modul.

1.2.2 Szablony

Aby oddzielić logikę od prezentacji używam szablonów Smarty, które cechuje własny język oraz możliwość cachowania wyników. Szablony umiejscowione są w katalogu Szablon. Szablony dzielimy na:

  1. Główne - szablony, które ładowane na początku. Dla każdej strony (np. /cms) obowiązuje tylko jeden szablon. Każdy z szablonów może być wykorzystywany dowolną ilość razy. Szablony wrzucamy do folderu Glowny.
  2. Frontowe - szablony, które ładowane są razem z modułami. Szablony, jeżeli nie zostanie wskazane inaczej, ładowane są z takiej samej lokalizacji jak odpowiadający mu moduł, z tym wyjątkiem, że nie znajdują się w folderze Modul, tylko w folderze Szablon/Front.
  3. Backendowe - szablony, które ładowane są razem z modułami. Szablony, jeżeli nie zostanie wskazane inaczej, ładowane są z takiej samej lokalizacji jak odpowiadający mu moduł, z tym wyjątkiem, że nie znajdują się w folderze Modul, tylko w folderze Szablon/Admin. Nie ma różnicy między szablonami frontowymi i backendowymi. Został stworzony osobny folder, aby uporządkowywać ich zbiór.

1.2.3 Helper

Jest to klasa pomocnicza. Podczas pisania modułu tworzymy taka klasę, jeżeli wiemy, iż część pisanego przez nas kodu może być używana w innych modułach. Jest to o tyle dobre rozwiązanie, jak potrzebujemy skorzystać np. z możliwości wyciągnięcia listy aktualności. Używamy tego w panelu administratora oraz na froncie do ich wyświetlenia.

1.2.4 Mapper

Mapper pełni tutaj dwojaką rolę. Jest modelem - czyli odwzorowuje komórki danej tabeli i mapperem - czyli obsługuje metody pozwalające na zapisywanie, usuwanie, dodawanie danych. W aktualnej wersji NCMS'a nie został zaimplementowany żaden mapper (zostaje on tworzony automatycznie tak jak i model - dopiero rozszerzając klasę mappera standardowego możemy napisać niestandardowy mapper), dlatego dalej w dokumentacji nic nie będzie na jego temat napisane.

1.2.5 Struktura plików

W NCMS ustanowiłem hierarchie przechowywania danych i klas ustawiłem w sposób następujący.

  1. Biblioteka - przechowuje klasy i pliki tj. bibliotekę smarty, sql, autoloader, core...
    • Form - tutaj trafiają wszystkie formularze
    • Mapper
    • Smarty
    • inne
  2. Cache
  3. Helper
  4. Modul
    • Admin - moduły dla admina
    • Front - moduły dla widza
  5. P
    • icons - wszystkie dostępne ikonki
    • images - folder na obrazki
    • js - folder na pliki JavaScriptu
    • style - folder na pliki styli (css i ewentualnie obrazki).
  6. Szablon
    • Admin
    • Front
    • Glowny

1.3 Przedstawienie encji

1.4 Pisanie modułów

Ten rozdział poświecę na opisanie krok po kroku jak tworzymy moduły i jak dołączamy je do strony. Zapraszam do lektury.

1.4.1 Tworzenie klasy

Klasy, które mają być modułami, tworzymy w folderze Modul. Moduły tworzymy dla frontendu i backendu oddzielnie. Dla przykładu chcemy stworzyć moduł rejestracji użytkownika. Dlatego, aby u strukturyzować nasz projekt tworzymy katalogi odpowiadające takiej ścieżce: Modul\Front\Uzytkownik\. W tak przygotowanym folderze zakładamy nową klasę. Tutaj warto dodać, że klasa musi mieć rozszerzenie .class.php, aby została załączona poprawnie przez autoloader'a.

  1. Tworzymy klasę o nazwie Rejestracja.class.php. Aby klasa spełniała właściwości modułu musi posiadać pewien interfejs (nie jest wymuszony, ale konieczny do działania!).
  2. Przede wszystkim każdy moduł dziedziczy po klasie Modul_Front_Abstract lub dla modułu admina Modul_Admin_Abstract. Klasy te zostaną omówione później. Nas interesuje na razie pisany przez nas moduł.
  3. Nazwa klasy musi być ścieżką do niej - czyli Modul_Front_Uzytkownik_Rejestracja. Tak został zaimplementowany autoloader i jest to najprostrzy sposób wczytanie klasy bez stosowania include'ów.
  4. Każda klasa powinna mieć napisaną publiczną metodę inicjalizuj:

public function inicjalizuj() {
 	$this->tytul = 'Lista modułów';
 

if (isset($this->param['akcja']) && $this->param['akcja'] == 'xml') { $this->xml(); } }

1.4.2 Metoda inicjalizuj

Metoda inicjalizuj wykonywana jest po inicjalizacji komponentu przez kontroler, ale przed wczytaniem danych do szablonu.

Metoda ta może, tak jak w przykładzie wyżej, zawierać przekierowania w zależności od parametru przekazanego do podpiętego modułu. Dla powyższego przykładu wywołanie samego modułu nie przetworzy żadnej logiki, natomiast wywołanie z parametrem akcja równym xml wykona metodę xml().

W metodzie tej można zmieć aktualnie dwie wartości. Tytuł strony $this->tytul = 'Lista modułów'; (ostatni załadowany na stronę moduł, który ma przypisany tytuł zostanie przypisany do zmiennej {strona.tytul} dostępnej po stronie szablonu) oraz szablon niestandardowym (o tym później).

1.4.3 Podpinanie zmiennych pod widok

Logika to jedno, widok to drugi. Do widoku możemy podpinać wyniki naszych obliczeń. Robi się to bardzo prosto. W klasie modułu wywołujemy przypisanie do zmiennej daneTPL. Dla przykładu pokażę, jak przypisać do widoku liczbę pod zmienną {$liczba}, oraz tablicy o nazwie 'tablica'.

$this->daneTPL['liczba'] = 2+4+8;
 $this->daneTPL['tablica'] = array(1,54,7,6,54,76,765,546576);

1.4.3 Uprawnienia

Do danego modułu mogą być wymagane uprawienia, aby z nego skorzystać. Aktualnie funkcja jest w fazie testów.

PORADNIK JEST NIEDOKOŃCZONY. AKTUALNIE PROJEKT DRZEMIE I CZEKA NA LEPSZE CZASY

1.5 AutoDB

Podręcznik omawiający przydatne metody oraz przykłady korzystania z biblioteki AutoDB. <do napisania>

2. Autorzy

Autorem dokumentacji oraz kodu jest Paweł Napieracz, chyba że wymieniono inaczej w nagłówku pliku. Autorami użytych bibliotek są:

  • Alfred Reinold Baudisch
  • Jeff L. Williams
  • Autorzy Smartiego
  • Samuel Stevens
  • Muharrem ERIN

Powered by Google Project Hosting