Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak pisac jadro ?
Forum PHP.pl > Forum > PHP > Pro
Stron: 1, 2, 3
NuLL
[OT]To nie jest sztuka dla sztuki - wszystko tutaj poruszone jest tematem z wyższej półki - i jest to ponad postawy php. Trzeba coś wiedzieć o wzorcach, architekturach dużych aplikacji itp - wtedy nie jest to hebrajszczzną winksmiley.jpg[/OT]
berdyk
ot i o to mi chodzi to gdzie mam tego szukać wyjaśnień
jak nie tutaj
Vengeance
Zazwyczaj jest tak, ze na jednym forum sa osoby z roznym poziomem zaawansowania... Wtedy normalnym jest ze posluguja sie pewnymi okresleniami (choc niektorzy przedobrzaja... chcac sie popisac, tylko przed kim:/ ). Musisz poprostu dalej poznawac php, zasady obiektowosci, czytac forum itd...

W pewnym momencie wiedza sama przyjdzie :] Raczej nie ma co liczyc na to, ze kazdy tu (z tych 6 stron tematu) bedzie tlumaczyl kazdy element swojej wypowiedzi komus, kto z php zaczal 2 tygodnie temu :/

Wszystko przyjdzie z czasem
eth
Chcialbym napisac jadro. Nie mam za bardzo pojecia jak sie za to zabrac. Dlatego szukam jakiegos tutoriala, artykulu lub w ostatecznosci ksiazki. Google w tej sprawie nie chce mi pomoc, wiec moze ktos z was bedzie sluzyl linkiem. Z gory dzieki za pomoc winksmiley.jpg
Strzałek
NIe ma książek o pisaniu jąda/cms'a, artykuły są np.:

http://webcity.pl/webcity/artykuly.php/t/18
http://webcity.pl/webcity/artykuly.php/t/22
http://webcity.pl/webcity/artykuly.php/t/23
http://webcity.pl/webcity/artykuly.php/t/25

ale generalnie każdy pisze po swojemu. W tym temacie chodzi głównie o teorie, niż gotowe rozwiązania skrypty.
Pokemon
@eth: do pisania jądra trzeba "dorosnąć".
Chodzi o to, że budując kolejną aplikację SAM dochodzisz do wniosku, że w sumie przydałoby się w tym i tym miejscu zastosować jakieś jedno logiczne sterowanie, obsługe szablonów, błędów, zapytań etc. Gdy dojdziesz do tego sam to z pewnością bez żadnej pomocy będziesz wiedział co ma się tam znaleźć i jak ma to wyglądać.

Nie ma sensu podążać za modą gdzie każdy ma własne... jądro biggrin.gif
drs
Od jakiegos czasu prubuje napisac silnik do swojego projektu (a mianowicie gry mmorpg z elementami strategi) pisze go poraz n-kturys .
Nie wiem czy to do czego doszedlem ma jakis sens,czy jest opłacalne moze poprostu robie za duzo rzeczy ale wydajemi sie to logiczne.Nie chodzi tu o jakies mechanizmy zwiazane z gra ale o sposob wyswietlania danych.To cos w rodzaju systemu szablonów tyle ze po stronie klienta(z wykorzystaniem obiektow javascript).
Przykład:
1 php->bazadanych
2 Tablica z wynikiem z bazy danych->zamiena na obiekt java script
3 Uzupelnienie kodu html za pomoca java script i dom

Powiedzmy ze mamy tabele w bazie danych zawierajaca informacje o uzytkowniku czyli :login ,hasło ,statystyki postaci ,sila zrecznosc i takie tam :
Przygowotuwuje recznie obiekt java script zawierajacy te same pola co w bazie

urzytkownik(login,passw,sila,etc){this.login = login;bla bla bla}

Nastepnie uzywajac takiej o to funkcji
function fill_obj($objname,$array){
$result = '<script> var '.$objname.' = new '.$objname.'("'.implode('","',$array).'")</SCRIPT>';
echo $result;
}

wypełniam ten obiekt danymi z bazy i wysylam d o przegladarki;
Pozniej za pomoca java script i dom wstawiam odpowiednie dane do htmla

function assign(tpl_var,value){var e=document.getElementById(tpl_var),childEl=document.createElement('a');
tpl_var.appendChild(childEl);var txtNode=document.createTextNode(value);
childEl.appendChild(txtNode);}

czy to ma jakis sens czy to sie oplłaca mi wydaje sie ze to odciazy serwer i daje wieksze mozliwosci jezeli chodzi o prezentacje danych ale moge zawsze sie myslic.
Prosił bym o jakis komentarz o ile ktokolwiek cos z tego zrozumie;
Vengeance
poczytaj o AJAX
drs
no wlasnie w ajaxie niepodoba mi sie to ze wyniki z bazy trzeba prasowac do xml a pozniej dopiero bawic sie tym w java script
splatch
Zatem użyj JP Spana bądź podobnego narzędzia - więcej możesz znaleść na http://ajaxian.com/by/topic/php/
chmolu
nie trzeba parsować do xmla. Możesz zwrócić surowy tekst (albo html i odpowiednio go wstawić w stronę ;p).
drs
a da sie zwrocic obiekt java script?
FiDO
Da sie w pewnym sensie.
Proponuje przeczytac tego newsa: http://www.quirksmode.org/index.html?/blog...jax_respon.html
Jest tam co nieco o sposobach zwracania danych, ich zaletach i wadach. No i do kompletu kolejna czesc tego newsa: http://www.quirksmode.org/index.html?/blog...x_respon_1.html

Komentarze tez warto poczytac.
witul
Mysle ze przez 3 lata od ostatniego postu wiele sie pozmienialo i proponuje odswiezyc temat.
Teraz bardzo popularne sa frameworki.
Uzywalem symfony, kohanej, troche zenda, CI - duzo wczesniej
Kohana jest bardzo przyjemna z racji tego ze jest lekka
Symfony za prostote pisania, jednak jest jak dla mnie zbyt duza do malych projektow.
Dlatego wlasnie pisze cos swojego - takie swoje jadro
Mieszajac to wszystko ze soba wymyslilem, ze:
Schemat nazw klas zastosuje taki jak w zendzie - A_B_C -> A/B/C.php
Strukture katalogow - tak podobnie do symfony:

Application
app1
view
controller
configuration

extend - klasy dziedziczone z jadra i przerobione pod aplikacje, np Dekorator użytkownika dla panelu administracyjnego
app2
...

Cache
Model
tutaj klasy modeli oraz klasy statyczne to obslugi calych tabel
Plugin - na podstawie PluginManagera oraz zdarzen
Core - klasy takie jak obsluga sesji, baz danych razem z ich sterownikami, modul orm, router, klasa requestow, PluginManager,UpdateManager zdarzen etc.
Helpers - helpery
Vendor - inne biblioteki
Configuration
View - standardowe widoku dla calych projektow - szablony bledow etc

tak wyglada ogolny zarys mojego pomyslu
Boje sie tylko ze nie dam rady tego dobrze napisac - nie martwie sie stabilnoscia ale wiadomo - nikt nie jest nieomylny ;D

Podsumowujac posta, ma to byc taka zupa z symfony, zenda, kohanej ale okrojona z rzeczy, ktorych w zyciu nie uzylem ale przyprawiona wlasnym doswiadczeniem, moze wyjdzie cos jadalnego czarodziej.gif
Pozdrawiam
cojack
A ja sobie zrobiłem tak:

app
- abstract
- controlers
- interfaces
- models
config
- command
- schema
data
- fixtures
- language
- migrations
- sql
- templates
lib
- Doctrine
- Opc
- Opl
- Opt
modules
tmp
- cache
- compiled
web

Oparłem to o sandboxa z doctrine, podobne rozwiązanie ma symfony, lecz mi się symfony nie podoba za duża abstrakcja dla mnie jak budowa PA embeded form itp, strasznie to porypane dla mnie.
Na razie stoję na pytaniu jak napisać router by wiedział że dany link odnosi się do danego controlera. To jest dopiero pytanie. I jakoś sobie nie mogę tego wymyslić.
marcio
Link www.mojastrona.pl/Home,Index,ShowNews.




Router: http://pastebin.com/m69c2e567




Dispatcher: http://pastebin.com/m1f789f0d




gdzie kontroler Home w metodzie Index wczytuje componenty i pluginy i tyle.




phpion
@marcio:
Taki mały OT: czy działa Ci metoda debug z klasy Dispatcher? Nie brakuje tam przypadkiem drugiego parametru do print_r()? smile.gif
cojack
Cytat(marcio @ 29.09.2009, 19:01:51 ) *
Link www.mojastrona.pl/Home,Index,ShowNews.




Router: http://pastebin.com/m69c2e567




Dispatcher: http://pastebin.com/m1f789f0d




gdzie kontroler Home w metodzie Index wczytuje componenty i pluginy i tyle.



Taki router to ja już dawno sobie napisałem, pytanie jak napisać router by wiedział że link:

/stara_babcia_lubi_tesco

odnosi się do:

kontroler = tesco
metoda = wyswietl

to jest pytanie.
marcio
Cytat(phpion @ 29.09.2009, 19:08:55 ) *
@marcio:
Taki mały OT: czy działa Ci metoda debug z klasy Dispatcher? Nie brakuje tam przypadkiem drugiego parametru do print_r()? smile.gif


Odziwo dziala chodzi ci o true jako 2 parametr?




Cytat(cojack @ 29.09.2009, 19:45:47 ) *
Taki router to ja już dawno sobie napisałem, pytanie jak napisać router by wiedział że link:

/stara_babcia_lubi_tesco

odnosi się do:

kontroler = tesco
metoda = wyswietl

to jest pytanie.

Ja mam pomysl tylko nie wiem co ma taki link:

Cytat
/stara_babcia_lubi_tesco



Do kontrolera tesco rozumiem ale metoda wyswietl() nie jest tam nigdzue wpisana chyba ze bedzie to defaultowa metoda.




Rozwin twoja odpowiedz bo nie rozumiem czego nie wiesz albo ja czegos nie wiem smile.gif

Crozin
@cojak: dosyć prosto takie coś zrobić (sam nawet swego czasu napisałem taki router, ale uznałem, że zabawa we własne FW to strata czasu :])

Generalnie rozwiązałem to tak (jak się później okazało w Symfony działa to na takiej samej zasadzie), że:
1) Tworzysz sobie plik z odpowiednimi regułami dla routera, definiujesz tam wzorzec adresu, domyślne parametry oraz określasz wyrażenia regularne dla konkretnych parametrów, przykładowo:
  1. <?
  2.  
  3. $routes = array(
  4. 'nazwa_konkretnej_reguly' => array(
  5. 'url' => '/twoja_babcia_lubi_tesco',
  6. 'params' => array('module' => 'tesco', 'action' => 'wyswietl')
  7. ),
  8. 'category_action' => array(
  9. 'url' => '/:action/:id/:slug',
  10. 'params' => array('module' => 'categories'),
  11. 'requirements' => array('action' => '\w+', 'id' => '\d+', 'slug' => '[\w-]+')
  12. ),
  13. 'homepage' => array(
  14. 'url' => '/',
  15. 'params' => array('module' => 'default', 'action' => 'default')
  16. )
  17. );

2) Router przy swoim utworzeniu wczytuje taki plik i przetwarza go na zestaw odpowiednich wyrażeń regularnych. Poszukaj sobie w manulu, znajdziesz tam sposób na to jak sprawić by konkretne podwyrażenia miały w zwracanej tablicy indeksy tekstowe, a nie numeryczne.
3) Następnie każde żądanie to kwestia przelecenia całej tej tablicy i sprawdzania czy dana reguła pasuje do aktualnego adresu URL, jeśli tak, to otrzymujemy bardzo ładną tablicę w postaci np.:
Kod
Array(
  'module' => 'tesco',
  'action' => 'wyswietl',
  'a jakby byly jeszcze jakies inne parametry zdefiniowane' => 'to też by się tu znalazły'
)
Oczywiście taką tablicę uzyskamy łącząc wyniki preg_matcha, z tablicą 'params' bezpośrednio z reguły (array_merge)
4) No i to by było tyle... teraz już wystarczy zwrócić wyniki
cojack
Crozin masz rację tak to się odbywa w symfony, sam właśnie próbuję bazować na tym pomyśle, tylko jest jeden problem, załóżmy że mamy dwie prawie identyczne akcje:

Kod
jakas_regula
  url: /:title/:id
  params: {module: jakies_module; action: jakies_action}

jakas_regula2
  url: /:title/:id
  params: {module: jakies_module2; action: jakies_action2}


bądź tu mądry i pisz wiersze winksmiley.jpg

Gdzie np jakas_regula odnosi się do newsów, a jakas_regula2 odnosi się do artykułów, obie chcesz by wyglądały identycznie, ale no nie bardzo się da co? :]
Crozin
Adres zostanie dopasowany do pierwszej reguły - dalsze sprawdzanie zostanie przerwane (tak jakbyś miał dodaną flagę L w Apache-owym module rewrite). A jeżeli chodzi Ci o to, że może to prowadzić do błędów (bo ktoś nieświadomie doda regułę "nadpisującą" wcześniejszą... cóż - zawsze możesz dodać np. dla środowiska "dev" dodatkowe sprawdzanie pozostałych reguł i gdzieś wyświetlić, że podany adres pasuje również do innych reguł - chociaż IMO to byłoby zbyteczne, za to wręcz koniecznym wydaje mi się zapisywanie nazwy reguły (jakaś_reguła) która została dopasowana.
marcio
Przepraszam ze zapytam ale co nam daje sposob zaprezentowany przez @Cozin?
bigZbig
Cytat(marcio @ 30.09.2009, 15:35:07 ) *
Przepraszam ze zapytam ale co nam daje sposob zaprezentowany przez @Cozin?


Mamy ładniejsze urle, a przy odrobinie wysiłku można budować różne url-e dla tej samej treści ale dla różnych wersji językowych.
Crozin
Nie tyle co ładniejsze, a bardziej konfigurowalne. Możemy sobie ustawić standardowe:
Kod
url: /:module/:action
I mamy taki sam efekt, jak Twój mechanizm. Ale możliwości tego zaprezentowanego przeze mnie są dużo większe, mimo iż to co zaprezentowałem, to tylko podstawowe możliwości.
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.