Blog programisty o C/C++ i PHP

Programowanie w C/C++ i PHP. Blog pełen wskazówek, porad, analiz i opisów.

Autorski CMS w 24 dni

luty 8th, 2008 in Programowanie w PHP

Stworzyła go potrzeba.

Postanowiliśmy z żoną przerobić trochę serwis www.pokoloruj.pl pod kątem SEO i Google. Chcieliśmy mieć możliwość w miarę prostej, ale bardzo elastycznej kontroli, zarówno nad layoutem jak i zawartością. Nie mogliśmy zdecydować się na żaden z istniejących CMS’ów, gdyż ciągle nam czegoś brakowało.

Postanowiłem, że stworzę własny system CMS, który pozwoli mi zrealizować to co ja będę chciał. W zasadzie nie jest to nic super wypasionego, aczkolwiek jest w pełni modułowy i stosunkowo elastyczny. Tak jak większość CMS’ów na rynku również i ten realizuje założenia MVC (w moim przypadku wykorzystane zostały Flexy Templates).

A co jest w środku ?

Zaglądając w kod systemu, nie znajdziemy tam właściwie nic szczególnego, prócz uogólnionego przetwarzania żądań oraz mechanizmu dostarczającego hierarchiczny kontekst do wizualizacji. CMS powstał w ok 24 dni robocze i jego specyficzną właściwością jest to, że każdy moduł można przypiąć do dowolnej sekcji w layoucie i w dodatku rendering modułów jest 2-stopniowy (wyjaśniam poniżej). Cały cykl aktywności przedstawia się tak:

  1. wywołanie głównego kontrolera witryny z parametrami (lub bez)
  2. po wstępnym przetworzeniu żądania sterowanie zostaje przekazane do kontrolera modułów - jego zadaniem jest koordynacja pracy kontrolera layoutu z modułami (uruchamianie odpowiedniego modułu i odpowiedni rendering)
  3. kontroler modułów na podstawie argumentów żądania wykonuje routing akcji do odpowiedniego modułu (o ile taki istnieje i nie jest zablokowany) - czyste wykonanie bez wyświetlania czegokolwiek
  4. sterowanie powraca do kontrolera modułów, który przy współpracy z kontrolerem  layoutu określa miejsce gdzie mają się pojawić poszczególne moduły. Każdemu z nich indywidualnie przydziela cel (kontekst wizualizacyjny) i każe modułowi wyświetlić się w postaci podstawowej (nieaktywowanej żadną akcją-żądaniem)
  5. pobiera z kontrolera layoutu miejsce, w którym mają pojawiać się wyniki działania modułów i dla aktualnie wykonywanego modułu wywołuje metodę renderującą, ale tym razem z zaznaczeniem, że wyświetlane mają być wyniki)

    Przykład praktyczny: w panelu bocznym-prawym znajduje się mini wyszukiwarka. Uruchomienie wyszukiwania wygeneruje wynik, który zostanie wyświetlony w panelu centralnym. Po kliknięciu w link “Wyszukiwanie zaawansowane” zamiast  wyników wyszukiwania w panelu wynikowym pojawia się rozbudowany formularz do wyszukiwania.

W przeciwieństwie do innych CMS’ów nie ma rozbicia na moduły i bloki. Tutaj są po prostu tylko moduły. Ich zadanie sprowadza się wyłącznie do wykonania określonej czynności i dostarczenia danych do wizualizacji. Żaden z nich nie wie gdzie i czy w ogóle zostanie wyświetlony (w TD czy DIV, z lewej strony czy też z prawej). Sam CMS służy wyłącznie do przetwarzania żądań i nie są z nim skojarzone żadne funkcjonalności użytkownika (nawet menu)

Jakie plany na przyszłość ?

W miarę możliwości i stosownie do potrzeb dodawane będą nowe możliwości. Nie chciałbym robić z niego “wielkiej kobyły” z notorycznie ujawniającymi się symptomami “przerostu formy nad treścią”. Aktualne możliwości są całkowicie wystarczające do zbudowania witryn dla sporej części moich klientów.
Najbliższe plany obejmują dostosowanie CMS’a dla potrzeb SEO oraz stworzenie modułu galerii.

Tags: ,

Leave a Reply