![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%) ![]() ![]() |
Witam, ostatnio na własne potrzeby zacząłem pisać coś w czym będę się czuć swobodnie pisząc kolejne aplikacje internetowe, to tak zwany "szkielet".
Uwaga, uwaga, w celu rozwiania pewnych uwag i wątpliwości pojęcie framework zostało objęte cudzysłowiem ponieważ jest to framework po mojemu, jeżeli komuś się nie podoba to nie musi używać i nie, nie będę patrzeć na Zend Framework czy inne frameworki - ten jest inny! Jednak jestem zwolennikiem Wolnego i Otwartego Oprogramowania dlatego postanowiłem, że podzielę się Swoją pracą z innymi ludźmi. Hosting projektu zapewnia github.com, niestety muszę przyznać, że to mój pierwszy projekt hostowany na GIT i mam nadzieję, że nic nie zepsuje po drodzę ( jestem ostrożny ) (IMG:style_emoticons/default/smile.gif) === TU TNIJ === Przejdę do rzeczy, konkrety, konkrety! No i oczywiście dodam link do repozytorium projektu: http://github.com/webnull/OpenWikiBlog Jądro Całość jest zbudowana w oparciu o jądro, a reszta to tylko moduły. Jądro może nie waży zbyt wiele, ale jest na prawdę funkcjonalne. Cechy jądra:
"Module On Demand" Wystarczy odwołać się do modułu który nie został załadowany aby został załadowany (IMG:style_emoticons/default/smile.gif) Kod $Kernel -> module -> moduleFunction ( Arguments ); Powyższy przykład w razie gdy moduł "module" nie istnieje załaduje moduł oraz odwoła się do jego funkcji o zwróci porządaną wartość. Skrypty startowe
Odnośnie skryptów startowych, na wiki jeszcze niema nic opisane ale obiecuję, że wkrótce opiszę każdy szczegół konfiguracji razem z "kolorowymi" przykładami ( gotowcami ) w miarę prosto i zwięźle. Obsługa domyślnych modułów Moduł może zdefiniować Siebie jako domyślny do wykonywania danej czynności, np. moduł MojErrorHandler może wywołać $Kernel->setAsDefault('MojErrorHandler', 'error_handler' ); Po zdefiniowaniu domyślnego modułu np. Error Handlera inne moduły będą go używać w taki sposób: Kod $Kernel->error_handler->log('asd'); "hooking" ( zaczep ) - czyli jak zmodyfikować prywatną zmienną wewnątrz funkcji innej klasy Od niedawna ( dwa ostatnie commity ) dodałem moduł libhooks ( nazwa wywoławcza: hooks ). Moduł pozwala zmodyfikować prywatną zmienną wewnątrz funkcji innego modułu jeżeli ten moduł na to pozwoli. Jak to działa w praktyce? Moduł który chce zmodyfikować dane innego modułu musi być załadowany najpierw. Definiujemy zaczep o nazwie np. "moj_zaczep" podając dodatkowo nazwę klasy i funkcji która ma być wywołana do zmodyfikowania danych przekazanych z zaczepu. Definicji dokonujemy w module który startuje najpierw. Teraz startujemy moduł który posiada dane do zmodyfikowania przez inny moduł, wykonujemy zaczep wrzucając do niego dane które przejmie drugi moduł i zwróci "w poprawionej wersji". Teraz prosty przykład:
Jak powstają nowe funkcje oraz moduły Kernela? Oczywiście buduję własne strony na tym frameworku i jeżeli coś stoi na drodze to poprawiam to lub dodaję nową funkcjonalność i publikuję na bieżąco na githubie. Zawsze jednak jeżeli jesteś chętny/chętna do współpracy to na prawdę zapraszam, z chęcią przejrzę każdą poprawkę i dodam do projektu. Niestety nie posiadam teraz żadnego zewnętrznego hostingu, dlatego strona testowa ( mój warsztat ) nie zawsze jest dostępny, ale wtedy kiedy będzie to zapraszam: http://194.29.181.186/tuxplace-cube/ To jedna ze stron która działa na frameworku. Zapraszam do ocen, oraz do pomocy przy pisaniu kodu (wnoszeniu poprawek jak i funkcjonalności nowej) (IMG:style_emoticons/default/smile.gif) PS. OpenWikiBlog dlatego, że projekt miał być małym mechanizmem podobnym do bloga - jedynie tworzenie i edytowanie podstron HTML razem z panelem administracyjnym ale się rozrosło (IMG:style_emoticons/default/smile.gif) -- WebNuLL Ten post edytował Babcia@Stefa 1.09.2010, 13:31:44 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(erix) Huh, domniemam że u Ciebie coś w stylu modelu musi być w DB i np. zawartości katalogu nie możesz użyć wymiennie (tzn. wymieniasz adapter w modelu i nie trzeba nic grzebać)? Ten fragment mam zamiar przepisać tak aby części bazy danych były wymienne a co do samego Kernela to projekt nie zakłada, że będzie wymienny. Przepisanie tego fragmentu nie pochłonie wiele pracy, obecny kod służył do testów.. Cytat(erix) Co z mod_rewrite? Całość jest i będzie przygotowywana pod mod_rewrite, niestety narazie nie stoi to wysoko bo całość testuję na lighttpd bez mod_rewrite. Cytat(erix) .so.php - co znaczy SO, bo jakoś nie mogę tego z niczym skojarzyć prócz uniksowych odpowiedników .dll. Nazywając "Jądro" Kernel, a pluginy modułami wprowadzam "styl nazw Uniksowych" do mojego projektu. Cytat(erix) Musisz się każdorazowo łączyć z DB? A jak wykonuję stronę na plikach bądź cache'uje, to nawet jeśli wszystkie dane z cache odpowiadają zapotrzebowaniu, to i tak połączenie zostanie nawiązane? Fajnie, że zrobiłeś module on demand, ale zysk jest minimalny w porównaniu z tą samą techniką stosowaną przy łączeniu z DB. Module on demand to po prostu prosta funkcja która pozwala na ominięcie zależności, jest to standard nazwany "po imieniu" w projekcie. Co do bazy danych, to jak widzisz - łączę się z DB każdorazowo. Myślę, że wprowadzenie jakiegoś cache nie będzie wcale problemem, jednak z tym jeszcze poczekam. Cytat(erix) A tego kompletnie nie jarzę. (IMG:style_emoticons/default/biggrin.gif) Proszę zatem przeczytać cały post, nie tylko fragmenty. W dolnej częsci postu *w komentarzu konfiguracji* jest pokazany przykład zastosowania. Nie jest to jakaś zaskakująca funkcja w PHP, jednak jest zaskakująca w tym "frameworku" ze względu na jego budowę. Cytat(erix) Ale są pewne standardy, które - pomimo nieco większego nakładu pracy przy tworzeniu - umożliwiają późniejsze szybsze i bardziej eleganckie pisanie aplikacji, chociażby mod_rewrite, podział na (H)MVC/MVP (dopiero po napisaniu paru aplikacji na bazie własnego frameworka można dostrzec, czego brakuje), czy formularze. Wybierając mój "framework" wybiera się coś innego niż reszta frameworków, lecz bardzo chętnie przyjrzę się konkretnym standardom i jeżeli są warte zaimplementowania to z pewnością zaimplementuję ale jednak chcę nadal aby projekt rozwijał się inną drogą. -- WebNuLL Ten post edytował Babcia@Stefa 1.09.2010, 17:50:47 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 23:45 |