konto usunięte

Temat: Architektura własnego CMS-a

Witam wszystkich bardzo serdecznie.

Mam do Was pytanie, które ostatnio wręcz spędza mi sen z powiek.

Mianowicie tworząc cmsa wzbogacamy go niejednokrotnie o nowe moduły. Większość modułów oparta jest o te samą zasadę. Możemy dodawać nowe rekordy, edytować istniejące, podejrzeć jeden lub wszystkie elementy. Łatwo więc zauważyć, że różnice jakie są miedzy modułami to głównie pola w formularzach oraz nazwy i typy kolumn w tabelach dla przykładu mysql.

Co za tym idzie? Intuicyjnie można stworzyć każdy moduł w osobnym pliku i wykonywać w nim odpowiednie akcje. Do tego też było trzeba przygotować szablony html.

Dążąc do optymalności i klarowności kodu chciałbym przygotować zestaw klas, które w łatwy sposób umożliwiałyby tworzenie elementarnych modułów, a w skrajnych przypadkach pozwalałyby nadpisać istniejące metody tak aby uzyskać pożądany efekt.

Jaki zestaw klas proponujecie do stworzenia uniwersalnego silnika do cmsa? Mam pewne koncepcje związane ze stworzeniem abstrakcyjnej klasy, na której podstawie tworzone byłyby obiekty już konkretnych modułów. Jasne też jest, że z pewnością potrzebujemy klasy do obsługi połączenia z bazą danych i system szablonów. Do tego też mógłbym zrobić klasę odpowiadająca za weryfikacje poprawności wprowadzonych danych. Wszystko oparte na autorskich rozwiązaniach.

Jakie jest Wasze spojrzenie na te sprawę?

Z góry dziękuję za poświęcony czas.

konto usunięte

Temat: Architektura własnego CMS-a

Zobacz sobie jakie biblioteki ma Zend Framework i możesz na tym się wzorować.
W sumie to nie ma sensu pisać frameworków od podstaw na własne potrzeby.
Prędzej dostosował bym takiego Zenda pod swoje potrzeby i miał bym gotową bazę pod projekty.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Architektura własnego CMS-a

Hubert Kunc:
Witam wszystkich bardzo serdecznie.

Mam do Was pytanie, które ostatnio wręcz spędza mi sen z powiek.

Mianowicie tworząc cmsa wzbogacamy go niejednokrotnie o nowe moduły. Większość modułów oparta jest o te samą zasadę. Możemy dodawać nowe rekordy, edytować istniejące, podejrzeć jeden lub wszystkie elementy. Łatwo więc zauważyć, że różnice jakie są miedzy modułami to głównie pola w formularzach oraz nazwy i typy kolumn w tabelach dla przykładu mysql.

Co za tym idzie? Intuicyjnie można stworzyć każdy moduł w osobnym pliku i wykonywać w nim odpowiednie akcje. Do tego też było trzeba przygotować szablony html.

Dążąc do optymalności i klarowności kodu chciałbym przygotować zestaw klas, które w łatwy sposób umożliwiałyby tworzenie elementarnych modułów, a w skrajnych przypadkach pozwalałyby nadpisać istniejące metody tak aby uzyskać pożądany efekt.

Jaki zestaw klas proponujecie do stworzenia uniwersalnego silnika do cmsa? Mam pewne koncepcje związane ze stworzeniem abstrakcyjnej klasy, na której podstawie tworzone byłyby obiekty już konkretnych modułów. Jasne też jest, że z pewnością potrzebujemy klasy do obsługi połączenia z bazą danych i system szablonów. Do tego też mógłbym zrobić klasę odpowiadająca za weryfikacje poprawności wprowadzonych danych. Wszystko oparte na autorskich rozwiązaniach.

Jakie jest Wasze spojrzenie na te sprawę?

Z góry dziękuję za poświęcony czas.

Myślę, że jeżeli chcesz zrobić uniwersalny silnik do CMS-a, który unifikuje wszystko to idziesz w złym kierunku. To co na pierwszy rzut oka wydaję się podobne, w szczegółach zwykle okazuje się zupełnie odmienne. Jeżeli chcesz stworzyć coś co będzie operowało na tabelach zapewniając podstawowe operacje CRUD, to możesz się wzorować np na PhpMyAdminie. Natomiast tworząc system klasy CMS zwykle kierujemy go do jakiś nietechnicznych użytkowników, którzy nie maja pojęcia o tabelach, relacjach etc. Oni nie zrozumieją, że aby dodać tag do artykułu trzeba do tabeli artykul_do_tagu dodać rekord o z dwoma polami id_tagu i id_artykulu.

Zresztą, wszystko zależy od tego do jakich celów chcesz używać tego CMS-a. Jeżeli chcesz go mieć dla siebie - postawić swoją stronę i napisać go w ramach samorozwoju to rób go od zera, czytaj fachowe blogi i sam dojdź do pewnych rzeczy. Jednak, jeżeli zamierzasz robić na nim strony dla przyszłych klientów, to lepiej skorzystać z gotowego CMS-a, pisząc tylko do niego szablony/moduły jeżeli będzie taka potrzeba. Stawiać osobom trzecim coś na swoim dziele jest dość ryzykowne. Projekty rozwijane przez społeczność są dużo lepiej przetestowane i zabezpieczone.
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: Architektura własnego CMS-a

Hmmm mam pewne uwagi do wypowiedzi kolegów powyżej:
Mariusz: autorowi chodzi o cms a nie framework.
Wojciech: autorowi chodzi właśnie o cms z modułami dla nietechnicznych, bez tabel itd.

Moim zdaniem dobrze kombinujesz, ja poszedłem tą samą drogą. Swego czasu napisałem taki cms do zarządzania typową stroną firmową (newsy, wydarzenia, dokonania itp) gdzie większość modułów jest do siebie podobna (jest lista rekordów, z typowymi kolumnami jak tytuł, data, treść itd), do każdego rekordu podpinasz zdjęcia, pliki itp. Oczywiście moduły są do siebie podobne, większość wykonywanych na nich operacji jest ta sama, czyli ogólnie CRUD, łatwo podpiąć dodawanie zdjęć, łatwo ustalić walidację itd, zmiana kolejności, sortowania, wyszukiwanie. Jestem w stanie szybko napisać kolejny nowy moduł i go podpiąć. Oczywiście wszystko zalezy do czego konkretnie to potrzebujesz, bo nie jesteś w stanie przewidzieć co klient będzie potrzebował, dlatego taki cms będzie w miarę czasy się zmieniał/ewoluował.
Czy warto: jeżeli masz czas i chęci: moim zdaniem tak.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Architektura własnego CMS-a

Adam Pawliczek:
Hmmm mam pewne uwagi do wypowiedzi kolegów powyżej:
Mariusz: autorowi chodzi o cms a nie framework.
Wojciech: autorowi chodzi właśnie o cms z modułami dla nietechnicznych, bez tabel itd.

Moim zdaniem dobrze kombinujesz, ja poszedłem tą samą drogą. Swego czasu napisałem taki cms do zarządzania typową stroną firmową (newsy, wydarzenia, dokonania itp) gdzie większość modułów jest do siebie podobna (jest lista rekordów, z typowymi kolumnami jak tytuł, data, treść itd), do każdego rekordu podpinasz zdjęcia, pliki itp. Oczywiście moduły są do siebie podobne, większość wykonywanych na nich operacji jest ta sama, czyli ogólnie CRUD, łatwo podpiąć dodawanie zdjęć, łatwo ustalić walidację itd, zmiana kolejności, sortowania, wyszukiwanie. Jestem w stanie szybko napisać kolejny nowy moduł i go podpiąć. Oczywiście wszystko zalezy do czego konkretnie to potrzebujesz, bo nie jesteś w stanie przewidzieć co klient będzie potrzebował, dlatego taki cms będzie w miarę czasy się zmieniał/ewoluował.
Czy warto: jeżeli masz czas i chęci: moim zdaniem tak.

Jak słyszę o unifikacji wokół CRUD-u to po prostu czuje taki 'code smell'. Z wypowiedzi autora postu po prostu wynikało, że jest mało doświadczony, co okazało się złą dedukcją z mojej strony.

Wracając do tematu. Jeżeli bym tworzył CMS-a od podstaw, to pierwsze nad czym się trzeba zastanowić, to targetowana platforma. Czy tworzymy pod 5.3+ czy pod stare php. Ten wybór dość determinuje dalsze poczynania (co do użytych bibliotek pomocniczych). Myślę, że warto też się zastanowić czy opieramy się na jednym frameworku czy też używamy frameworków jako bibliotek biorąc z nich tylko potrzebne rzeczy. Następną kwestią jaką trzeba rozważyć jest to jakie mamy potrzeby ? Czy będziemy chcieli tworzyć również bardziej dedykowane rozwiązania na tym CMS-ie, czy tylko proste stronki. Bo jeżeli proste stronki to oczywiście będziemy projektować jakąś standartową baze danych etc. Jeżeli bardziej dedykowane to zaprzągł bym ORM-a do utrwalania i projektował bardziej obiektowo wszystko.

Myślę, że od tych podstawowych pytań należy zacząć wszelkie rozważania na temat architektury.
Kamil Kosiński

Kamil Kosiński CTO w
DobryMechanik.pl

Temat: Architektura własnego CMS-a

Jeśli chcesz pisać tego CMSa od podstaw w ramach nauki to ma sens. Jeśli jednak chcesz stworzyć coś w oparciu o co, będziesz robił przyszłe wdrożenia, to pisz go w oparciu o jakiś framework.

I właśnie wybór fw powinien być pierwszym krokiem. Który? To mniej istotne. Posiedź trochę na kilkoma wybranymi, zobacz co Ci najbardziej odpowiada.

Ja wybrałem CakePHP (nie, pewnie nie jest najlepszy, każdy będzie miał swojego faworyta) ze względu na to jak szybko się w nim pisze i to jak zrealizowano w nim pluginy (każdy plugin to to u mnie moduł cmsa).

Przemyśl co da się ustandaryzować (menu akcji, listy, formularze, podgląd, ...) i próbuj to realizować.

Fw daje ci pewne możliwości, pewną warstwę Twojego cmsa. Na bazie fw tworzysz kolejną warstwę, która ma pomóc Ci jeszcze szybciej realizować pewne zadania (tworzyć moduły cmsa).

To na co warto szczególnie zwrócić uwagę to to, że większość modułów da się zaprezentować jako jeden z poniższych:
- pojedyncza strona (kontakt, o nas, ...)
- lista stron (aktualności, referencje, ...)
- lista z kategoriami (galeria z albumami)
- drzewko stron (katalog produktów, inne katalogi)
- formularz

Jeśli będziesz szybko w stanie tworzyć moduły w oparciu o np. taki właśnie zestaw, to to czy Twój CMS ma "gotowy" moduł aktualności, referencji, klientów, katalog produktów, taką czy inna stronę, taki czy inny moduł nie ma znaczenia, bo w 20-30min stworzysz go w oparciu o komponenty, które wcześniej sobie przygotowałeś.

Im dalej będziesz starał się "standaryzować" tym trudniej będzie. W pewnym momencie okazuje się, że Twoje "komponenty" potrzebują więcej konfiguracji niż nakazywała by logika. Wtedy powiedz sobie stop ;)

Obecnie podgląd+edycja inline poszczególnych elementów (treści, daty, zdjęcia, ...) to u mnie wywołanie $merturi->fields( 'News', $aNews ) - to generuje całą stronę odpowiedzialną za podgląd i edycje pojedynczego newsa.
Listy, drzewka, czy dane w zakładkach tworzę w podobnie prosty sposób.

Czy warto? Tylko początkowo wydaje się, że 1-2-3-4 miesiące wystarczą. Pracy jest dużo więcej niż Ci się wydaje.
Pomyśl ile wdrożeń cmsa będziesz robił i czy warto się ładować w pracę na 1-2 lata (oczywiście im prościej, tym krócej, ale też im prościej tym dłużej dobudowujesz kolejne moduły).

Jeśli ma być to nauka, to pisanie własnego cmsa jest świetnym pomysłem na naukę wybranego fw.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Architektura własnego CMS-a

Jest jeszcze inna koncepcja na CMS - oparta o widgety. Rozdzielamy kwestię struktury serwisu i jego wyglądu od treści. Wygląda to tak, że moduły odpowiadają tylko za treść i manipulacje nią. Każdy z modułów posiada natomiast zestaw widgetów, dzięki którym można prezentować tą treść. Tworząc nową stronę w ramach CMS-a po prostu komponujemy ją z widgetów ustawiając im treść która mają prezentować. Każdy widget ma również zestaw szablonów dzięki czemu możemy łatwo zmienić sposób prezentacji treści w jego ramach. Każda strona ma również ustawiony jakiś szablon, który w zasadzie ustawia na niej widgety.

konto usunięte

Temat: Architektura własnego CMS-a

@ Wojciech Soczyński: Dziękuję za odpowiedź. Do tej pory stawiam klientom strony na własnym autorskim rozwiązaniu i już są to moduły wdrażane niejednokrotnie.Także nieścisłości zostały zniesione, przynajmniej w znaczącym stopniu. Zresztą jestem zagorzałym fanem autorskiego oprogramowania. Myślę, też że umiejętność samodzielnego stworzenia np cms-a jest w pewnym sensie miarą umiejętności programisty. Pracowanie na gotowych rozwiązaniach z reguły ograniczy się do zapoznania się z dokumentacją, a stworzenie samodzielnie czegoś takiego wymaga już nieco większej wiedzy o programowaniu. Nie jest też moim celem oprogramowanie 100% uniwersalne. Zdaję sobie sprawę,że to jest nierealne.Aczkolwiek staram się osiągnąć taką architekturę, aby móc ją często wykorzystać i nie rzadko nadpisać. Zgodzę się jednak w 100%, że gotowe rozwiązania na pewno będą lepiej przygotowane do pewnych rzeczy ponieważ są rozwijane przez wiele osób,aczkolwiek dedykowane oprogramowanie zawsze daje efekt jaki klient oczekuje - bez dodatkowych funkcjonalności.

@Kamil Kosiński: Dziękuję za odpowiedź Kamilu. Głównym celem stworzenia takiego silnika nie jest cel edukacyjny - chociaż pośrednio w pewnym stopniu tak. Głównie rozchodzi się o to, że budują pewną markę, którą będzie własnie CMS. Zdaję sobie sprawę, że proponowane przez Ciebie rozwiązani tzn wykorzystanie fw byłoby z pewnością korzystnym rozwiązaniem, aczkolwiek uciekam od tego. Wynika to z tego, że bardzo duży nacisk kładę na fazę kreacji. Wiem, że używając fv cała para nie idzie w gwizdek i mogę skupić się na czymś innym. Jednak zdaję sobie sprawę, że tworząc samodzielnie więcej się nauczę i w przyszłości z większymi problemami stawię czoła od a do z, bo nie będę potrzebował "wspomagaczy" :)

@Wojciech Soczyński: Również dziękuję za odpowiedź, przyznam że tej koncepcji nie brałem jeszcze pod uwagę. Z pewnością będę o tym dzisiaj myślał.Dziękuje
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Architektura własnego CMS-a

hmm zobacz sobie chociazby eZ publish, jakbym go nie lubil itd to jednak podoba mi sie idea trzymania contentu jaka stworzyli



Wyślij zaproszenie do