Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: w3cms - projekt systemu
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
zulus
Wiem że to kolejny temat z serii "zaczynam, pomocy!", ale...

Zaczynam pisać CMS'a na razie nazywa się w3cms, ale to może ulec zmianie.
Wszystko jest w fazie projektów:

Założenia
  • System ma sie operać na zdażeniach
  • Będzie opierał się na MVC i fabrykach objektów
  • Ma być stosunkowo prosty w rozbudowie (jest modularny)
  • Każdy element (nawet system uwierzytelniania) można podmienić. Pozostaje tylko baseSystem.
  • Tylko PHP5 - inaczej się nie da.
  • Przebieg działania (dosyć ogólny) - Tutaj
  • Najprawdopodobniej udostępnię go na GPL'u

To tak w skrócie.

Układ katalogów

Kod
/ ---- katlog główny, tylko index'y i pliki apache (.htacces)
/lib -- pliki klas
/lib/dao/*/ -- wiadomo;)
/lib/control/*/ -- obiekty do obsługi zdarzeń

/etc/baseSystem -- konfiguracja podstawowa (można ew ustalić inne położenie, poza public_html
/etc/*/ -- jeżeli modół ma własny plik konfiguracji to tutaj, gdzie * nazwa modułu

/share -- pliki modułów, nie php
/share/locale/kod_języka/ -- tłumaczenia, zastanawiam się nad rozwiązaniem
/share/*/ -- jeżeli np galeria, to jej zdjęcia

/var/*/ -- pliki dodtakowe modułów, np logo, licencja, info o autorach, screen itd.

/dev/*/ -- widoki (np /dev/html, /dev/ajax/,/dev/pdf)

/proc -- base system

/home/ -- opcjonalnie, jeżeli użtkownicy mają możliwość przechowywania własnych danych

( kocham linux'a winksmiley.jpg )

Przykład działania
  • Z zewnątrz dostaje jakieś żądanie (POST, GET, ssh).
  • Dane żadania są zbierane, sprawdzane pod katem bezpieczeństwa aplikacji, tworzony jest obiekt zdarzenia z danymi(w nim będzie np jaki widok itd) i przekazywany do $obj=system::sendEvent($event);
  • Jest sprawdzane w systemie kolejno, czy jest dostępny, czy może być obsłużony w danym widoku itd (jak w diagramie)
  • Jeżeli sprawdzanie się powiedzie, zostaje zwrócony obiekt zgodny z interfejsem serviceEvent, konkretny dla danego modułu.
  • Następnie jest wywoływana jawnie funkcja $obj->service();
    Należy pamiętać że jedno zdarznie będzie wymagało kilku odświerzeń w przeglądarce (pobieranie konkretnych danych)
  • Jeżeli stan zdarzenie pozwala na zmianę danych, to tworzony jest niejawnie kontroler który validuje te dane, i mamy 2 scenariusze.:
    • Powodzenie, wtedy informuje system że zakończył działanie i generuje kolejne zdarzenie (wyświetlenie komunikatu powodzenia), po czym następuje usunięcie z kolejki.
    • Niepowodzenie -- równierz generuje zdarzenie, które w efekcie nakaże widokowi pokazanie błędu i ew pobranie ponownie danych, ale w tym wypadku nie dojdzie do usunięcia z kolejki.

To tylko zarys. Mam nadzieję że nie popełniłem jakiś straszliwych błędów.

Odrazu też zadam kilka pytań.
  • Czy jest jakiś prosty sposób na odczytywanie plików .po albo .mo w php?
  • Czy warto postawić np w warstwie abstrakcji baz danych na jeszcze jedną (adoDB-chyba jakos tak, nie pamiętam)
  • Powinienem użyć np SVN, czy lepiej odrazu pisać i olać kontrolę wersji? - pewnie będe pisał sam
  • Jakieś sugestie?
UDAT
Cytat
Czy jest jakiś prosty sposób na odczytywanie plików .po albo .mo w php?

Jest Babel

Cytat
Czy warto postawić np w warstwie abstrakcji baz danych na jeszcze jedną (adoDB-chyba jakos tak, nie pamiętam)

Warto ORM'a (najlepiej opartego na PDO), np. Propela

Cytat
# Powinienem użyć np SVN, czy lepiej odrazu pisać i olać kontrolę wersji? - pewnie będe pisał sam
# Jakieś sugestie?

Wątpie żeby ci się udało tak od ręki, napisać łatwego w rozbudowie, modularnego CMS'a. Zainteresuj się UML'em. Ja tam wolę używać kontroli wersji, ale kto co lubi winksmiley.jpg
zulus
"Od ręki" to nie bardzo. Nad CMS'em myslę od dłuższego czasu. I bawię się UML'em rozważając różne scenariusze. Chodzi mi o to żebym miał wygodne narzędzia do składania portalu (baseSystem), a przy tym zachować jakąś wspólną, w miarę zrygoryzowaną strukturę nie tracąc przy tym zbytnio na elastyczności.
nasty
Cytat
System ma sie operać na zdażeniach

CMS oparty na zdarzeniach to nie jest dobry pomysl, dlatego w ASP.NET ciezko pisze sie CMS-y bo jest oparty na eventach, zdarzenia sa dabre to aplikacji gdzie jest duzo formularzy, i innych bajerow, w cms-ie to jest praca z trescia w kturej watpie zeby byly zdarzenia, a druga sprawa to w zdarzeniach ciezko jest "dokladnie" obugiwac requesty usera w cms-ie
zulus
Ja chciałem troche inne podejście. W sensie zdarzenie rozumiem obiekt(specjalnej klasy) w którym zawarte są informacje takie jak jaki widok, lub kontroler zdarzenie podrzędne. Np. dostanę POST lub GET żądanie dodania artykułu:
  1. Pobranie danych z POST/GET i stworzenie obiektu rządania
  2. W trakcie tworzenia sprawdzenie czy widok jest wybrane, jeśli nie to domyślny.
  3. System odbiera żądanie i sprawdza czy pakiet jest w systemie, i czy widok może obsługiwać żadania kontrolera.
  4. Jeśli tak, kontroler generuje żądanie pobrania danch od user'a (wiadomo)
  5. System "informuje" widok co ma zrobić.
  6. I tak w kółko do póki kontroler nie stwierdzi że ma kompletne dane od user'a, zrobi swoje i wygeneruje żądanie wyświetlenia komunikatu. (powodzenie błąd)
  7. Jeżeli dane są nie kompletne to też jest generowane żądanie ponownego pobrania danych.

Przy okazji mam kolejne pytanie. Czy będzie zgodne z MVC, to że dane przychodzące validuje kontroler.
I drugie: logiczne jest dla mnie, że tak naprawdę do jednego modelu jest jeden kontroler który komunikuje się z nim bezpośrenio. I tu tez nie jestem pewny co do zgodności z MVC :/


P.S. Sorry za błedy winksmiley.jpg
sf
Hm, a ja proponuje inna strukture:

lib/ - biblioteki, ktore mozna tez uzywac w innych aplikacjach
aplikacja/ - tutaj sa moduly, akcje oraz cache ( oczywiscie zakaz dostepu na ten katalog )
web/ - templaty, obarazki, css, js
silnik/ - tutaj jest caly framework, ktory zarzadza aplikacja i wywoluje to co jest w app... app wywoluje to co jest w web i lib
Ociu
Ja mam tak:
./kernel - framework
./lib - dodatkowe biblioteki
./web - widoki
./share - konfiguracja modułów
./modules - akcje
bigZbig
A ja mam
./includes - klasy i pakiety ogolnego zastosowania np. Request, Ado (np. PDO lub ADOdb), Dto, Templates (np. Smarty), Dispatcher, Tree, Session itd.
./modules - moduly skladajace sie na calosc mogace jednoczesnie byc samodzielnymi aplikacjami np. News, Articles, Calendar, Catalog, Gallery

Uklad podkatalogow w powyższych zalezy juz od danego pakietu. Kazdy pakiet ma swoj plik inicjalizujacy ktory jest odpowiedzialny za dolaczenie odpowiednich klas lub ustawienia konkretnych zmiennych potrzebnych do dzialania danego zbioru. W kazdym razie uchwyty zdarzen czy szablony znajduja sie wylacznie w katalogu modules. Zawartosc katalogu inkludes jest bardziej abstrakcyjna. Idea klas tam zgromadzonych jest taka aby wszystko co mozliwe bylo wymienne - oczywiscie po napisaniu odpowiednich klas oslonowych zgodnych z domyslnymi interfejsami.

Uzywam zdarzen przy czym jako zdarzenie rozumiem np. wydanie polecenia DisplayNews
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.