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

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: 22.08.2025 - 14:16