Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [skrypt] "framework" OpenWikiBlog, Wolne oprogramowanie
Babcia@Stefa
post
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:
  • Budowa jądra zakłada maksymalnie łatwą dla dewelopera obsługę modułów
  • Obsługa "domyślnych modułów" - muszą mieć zaimplementowany uniwersalny interfejs
  • "Module On Demand" - Pierwsza cecha również tyczy się zależności, moduły ładowane są wtedy kiedy potrzeba ( same się załadują - to poprawia wydajność )
  • Tak zwany skrypt startowy, są w nim moduły które startują razem z skryptem domyślnie
  • "CallThroughtKernel" - pozwala w skryptach startowych zamiast modułu podać tylko jego wewnętrzną funkcję aby wywołać ją później
  • "Kernel Module Triggers" - czyli odpowiednie reguły które jeżeli się zgadzają to moduł zostanie załadowany ( uproszczona budowa zapewnia szybkość wykonywania kodu )


"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

  1. $MODS['admin'] = array ( 'k_TRIGGERS' => array (array(1=>$_GET['page'], 2=>9))); // jeżeli $_GET['page'] == 9 to moduł zostanie załadowany
  2. $MODS['hooks'] = NuLL; // normalnie ładuje moduł
  3. $MODS['smarty'] = array ( 'caching' => false,
  4. 'cache_lifetime' => 120,
  5. 'template_dir' => 'websites/cube/templates',
  6. 'compile_dir' => 'websites/cube/templates_c',
  7. 'config_dir' => 'websites/cube/core',
  8. 'cache_dir' => 'websites/cube/cache' ); // ładuje moduł smarty z odpowiednimi argumentami
  9. $MODS['translator'] = array ( 'default_language' => 'english' ); // ładuje moduł translator z argumentami
  10. $MODS['mypage'] = array ( 'index' => 1 ); // ładuje mypage ze wskazaniem która strona to strona główna
  11. $MODS['menu'] = NuLL; // ładuje menu
  12. $MODS[] = array ( 'mypage', 'display', ''); // odwołuje się do modułu mypage i wykonuje display() z argumentem '' - inaczej CallThroughtKernel


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:
  1. modul_pierwszy {
  2. konstruktor_lub_dowolna_funkcja { // najlepiej konstruktor
  3. definiuj_zaczep ( 'liczba', 'modul_pierwszy', 'edytor_zaczepu' );
  4. }
  5.  
  6. edytor_zaczepu ( $dane ) {
  7. return ($dane+1);
  8. }
  9. }


  1. modul_drugi {
  2. konstruktor_lub_dowolna_funkcja {
  3. $moja_liczba = 500;
  4. echo $moja_liczba; // pokaże 500
  5. wykonaj_zaczep ( 'liczba', $moja_liczba );
  6. echo $moja_liczba; // pokaże 501 ponieważ zaczep wykona funkcję modul_pierwszy->edytor_zaczepu($dane) i ustawi zwrócone dane funkcji w zmiennej $moja_liczba
  7. }
  8. }


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Babcia@Stefa
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

Ostrzeżenie: (0%)
-----


Cytat(SHiP)
Pomijam fakt, że w tym projekcie część komentarzy jest totalnie kretyńska: zobaczcie np. core/database.php


To jest prawda, jednak te komentarze nie były na darmo.
Te komentarze ułatwiły Mi pisanie kodu tych funkcji, bez nich bym się pogubił więc raczej te komentarze są po prostu dla Mnie i mogę je usunąć ponieważ funkcje skończone..

-- WebNuLL
Go to the top of the page
+Quote Post

Posty w temacie
- Babcia@Stefa   [skrypt] "framework" OpenWikiBlog   1.09.2010, 12:50:34
- - SHiP   Nie przeglądałem dokładnie ale jak wrócę z pracy t...   1.09.2010, 14:21:35
- - Spawnm   czemu w index.php masz session_start() ? query()...   1.09.2010, 14:37:04
|- - Babcia@Stefa   Cytat(Spawnm @ 1.09.2010, 14:37:04 ) ...   1.09.2010, 14:51:12
- - Zyx   Uwagi na szybko: 1. Jaki jest sens używania niest...   1.09.2010, 15:18:26
- - Babcia@Stefa   Cytat(Zyx)Po co Ci w tym i w wielu innych miejscac...   1.09.2010, 15:33:11
- - erix   Cytatklepiesz wszystko od A do Z, tymczasem PHP 5....   1.09.2010, 16:39:51
|- - SHiP   Cytat(erix @ 1.09.2010, 16:39:51 ) Ta...   1.09.2010, 18:45:15
- - Babcia@Stefa   Cytat(erix)Huh, domniemam że u Ciebie coś w stylu ...   1.09.2010, 17:48:47
- - mike   Zamiast komentować kod włóż wysiłek w jego poprawę...   1.09.2010, 18:02:37
|- - Babcia@Stefa   Cytat(mike @ 1.09.2010, 18:02:37 ) Za...   1.09.2010, 18:28:56
|- - phpion   Cytat(Babcia@Stefa @ 1.09.2010, 19:28...   1.09.2010, 18:38:18
|- - mike   Cytat(Babcia@Stefa @ 1.09.2010, 19:28...   1.09.2010, 19:36:56
- - Babcia@Stefa   Dzięki phpion, zapomniałem o "moim" stan...   1.09.2010, 18:41:55
- - Babcia@Stefa   Dzięki SHiP, poprawione. Wszelkie poprawki jakie ...   1.09.2010, 18:52:55
- - erix   CytatProszę zatem przeczytać cały post, nie tylko ...   1.09.2010, 19:18:13
- - Babcia@Stefa   Cytat(erix)Coś innego, czyli? Zachęć mnie. Podaj j...   1.09.2010, 19:24:05
- - SHiP   @erix: Podejrzewam, że so = shared object - http:/...   1.09.2010, 19:24:29
|- - phpion   Cytat(SHiP @ 1.09.2010, 20:24:29 ) je...   1.09.2010, 19:44:19
- - Babcia@Stefa   Cytat(SHiP)Po co ta zmienna $APP ? Nie potra...   1.09.2010, 19:35:42
- - SHiP   @mike: wcale tak nie jest. Niektórzy przyjmują, że...   1.09.2010, 19:48:59
- - erix   CytatNie muszę podawać argumentów, masz kod. No wł...   1.09.2010, 19:53:14
- - Zyx   Małe info - poszczególne fragmenty mogą być adreso...   1.09.2010, 20:15:23
- - mike   ~SHiP wybacz ale nazwiska sygnatariuszy manifestu ...   1.09.2010, 20:19:45
- - Babcia@Stefa   Cytat(SHiP)Pomijam fakt, że w tym projekcie część ...   1.09.2010, 20:48:05
- - SHiP   @mike: zgadzam się i sądzę, że ilość komentarzy na...   1.09.2010, 22:21:14
|- - Babcia@Stefa   Cytat(SHiP @ 1.09.2010, 22:21:14 ) @m...   2.09.2010, 17:56:11
- - nospor   a ja sie poczepiam trochę bazki [SQL] pobierz, pla...   2.09.2010, 20:01:08
- - erix   Cytat4) `restrictip` varchar(200) NOT NULL...   2.09.2010, 20:34:07
|- - Babcia@Stefa   Cytat(erix @ 2.09.2010, 19:34:07 ) Ju...   2.09.2010, 21:14:38
|- - mike   Cytat(Babcia@Stefa @ 2.09.2010, 22:14...   3.09.2010, 10:26:00
- - erix   Cytata ile hash ma znaków tego nie liczyłem narazi...   2.09.2010, 21:59:35


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 16:38