DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 23. 08. 2006.   #1
bluesman
Goran Pilipović
Sir Write-a-Lot
 
Avatar bluesman
 
Datum učlanjenja: 18.05.2005
Lokacija: Beograd
Poruke: 5.450
Hvala: 288
1.247 "Hvala" u 446 poruka
bluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušatibluesman je osoba koju treba slušati
Pošaljite ICQ poruku za bluesman
Default Plugin sistem

Koji su metodi implementacije plugin sistema, imam neku ideju posto se u dosta aplikacija ponavljaju skoro isti elementi, pa cak i to da ubrzam, neke stvari kao sto je recimo "news" da napravim kao plugin koji se dodaje. Interesuje me, oni koji su radili to do sada ili su imali prilike da prostudiraju kako to drugi rade, koji su najcesce i najpouzdanije metode.

Smarty to radi na nivou funkcija, kada se plugin koristi u template-u, on proverava da li takav postoji u plugin direktorijumu, i izvrsi tu php funkciju. On pravi razliku u odnosu na output, neke zove modifiers, neke fuctions, neke block....

Moja ideja je da plugin bude jedna klasa, koja ce da nasledjuje abstraktnu klasu "plugin", a u configu moraju rucno da se inicijalizuju.

Recimo imam klasu plugin:
PHP kôd:
abstract class Plugin 
a onda svaki plugin mora da bude
PHP kôd:
class MojPlugin extends Plugin 
onda imam klasu Plugins koja sadrzi sve registrovane pluginove koji se dodaju kao
PHP kôd:
$plugins->register('MojPlugin'
I onda se moze koristiti ta klasa.

Kasnije, neki drugi plugin moze da nasledi cak i postojeci plugin i ponasa se normalno kao bilo koji.

Kako to resavaju drugi?
Off Topic: sada se pokazuje da ipak ponekad treba da pogledas tudji kod da ne izmisljas toplu vodu
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman
I don't always know what I'm talking about but I know I'm right!

Poslednja izmena od bluesman : 23. 08. 2006. u 12:35.
bluesman je offline   Odgovorite uz citat
Staro 23. 08. 2006.   #2
dinke
Super Moderator
Invented the damn thing
 
Avatar dinke
 
Datum učlanjenja: 06.06.2005
Poruke: 2.371
Hvala: 370
701 "Hvala" u 194 poruka
dinke je pravi dragi kamendinke je pravi dragi kamendinke je pravi dragi kamendinke je pravi dragi kamendinke je pravi dragi kamendinke je pravi dragi kamendinke je pravi dragi kamen
Default

Nisam se nikada bakcao ali i meni ce trebati. Pogledaj aprilski broj phparch-a, tamo ima interesantan tekst na ovu temu (doduse, pretezno je proceduralno orijentisan, sto mi se nije svidelo).
__________________
Caught in a Web|Blogodak
With great power comes great responsibility!
dinke je offline   Odgovorite uz citat
Staro 23. 08. 2006.   #3
Pedja
Predrag Supurović
Grand Master
 
Datum učlanjenja: 24.01.2006
Lokacija: Užice
Poruke: 791
Hvala: 3
200 "Hvala" u 12 poruka
Pedja is on a distinguished roadPedja is on a distinguished roadPedja is on a distinguished road
Default

Sve se svodi na to da uvedes standardizovan nacin komunikacije aplikacije sa plugin-om. Mozes tako kako si zamislio sa klasama, a mozes i preko procedura.

Tesko je ulaziti u detalje, jer to sve zavisi od konkretne implementacije i uopstenosti koju zelis da postignes.

U principu potrebno je da core aplikacije zna da primi zahtev za odredjeni plugin (modul), da moze da prosledi informaciju koja tacno opcija modula treba da se pokrene, da toj opciji prosledi custom parametre i naravno da moze da proveri da li korisnik ima dovoljne privilegije da pristupi opciji plugin-a.

Kada sam razvijao takav sistem isao sam prilicno siroko tako da svaka opcija u pluginu moze da definise sadrzaj za title, keywords, description, i druge sadrzaje koji idu cak i u HTTP header, sve kroz standardizovan mehanizam.

Dobra stvar koju valja da uradis to je da svaku opciji plugina podelis na dva dela: apliativni i vizuelni deo. Apliaktivni izvrsis pre nego sto uopste pocnes kreiranje HTML strane, a vizuelni u toku genersianja dokumenta. Tako dobijas velike mogucnosti da uradis prakticno bilo kakvu apliakciju, a pre svega to da opcija plugina moze da utice na celu aplikaciju, bas zato sto se njen aplikativni deo izvrsi pre nego sto pocne generisanje HTML-a, kada uvek imas prostora da promenis ponasanje bilo kog dela aplikacije.

Takodje, treba da ozbedis mehanizam da jedna opcija plugina moze da inkluduje bilo koju drugu opciju bilo kog plugina u aplikaciji.
Pedja je offline   Odgovorite uz citat
Staro 25. 08. 2006.   #4
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

meni se svidja kako je u Wordpressu to reseno, oni su pluginove radili u bliskoj saradnji sa call-back sistemom koji je ugradjen u WP. Pluginovi se naprosto inkluduju kao obicne php skripte (koji pluginovi se inkluduju kontrolise se u konfiguraciji) i oni se izvrse kao obican php skript, a njihov je zadatak da se registruju za akcije koje ih zanimaju koristeci WP-ove ugradjene funkcije. Kad se neka od tih akcija izvrsava WP pogleda niz registrovanih funkcija za callback za tu akciju i onda ih redom pozove, i tako pluginovi mogu da se ubace u razne delove sistema. Vrlo elegantan i flexibilan interfejs.
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 25. 08. 2006.   #5
MorenoArdohain
Knowledge base
Wrote a book
 
Avatar MorenoArdohain
 
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 1.437
Hvala: 37
131 "Hvala" u 82 poruka
MorenoArdohain će postati "faca" uskoroMorenoArdohain će postati "faca" uskoro
Default

^^ I agree, dokaz je na hiljade napisanih pluginova
__________________
Năo quero mais seguir um só caminho
MorenoArdohain je offline   Odgovorite uz citat
Staro 25. 08. 2006.   #6
Ilija Studen
Direktor Kombinata
Invented the damn thing
 
Avatar Ilija Studen
 
Datum učlanjenja: 07.06.2005
Poruke: 2.669
Hvala: 44
119 "Hvala" u 64 poruka
Ilija Studen će postati "faca" uskoroIlija Studen će postati "faca" uskoro
Default

Dodati event sistem u skriptu je jako obiman posao i uglavnom za postojeće stvari podrazumeva prolazak kroz većinu koda. Originalna ideja za plugine kod activeCollaba je bila baš to - event sistem gde se pluginima daje mogućnost da se subscribuju na određeni event i obrade ga kad isti bude "okinut".

Ono što mene najviše brine ovde su performanse. Koliki to stvarno overhead donosi? Mislim, activeCollab sam po sebi jeste trom (će da bude sređeno!) i bojim se da bi ga ovako nešto podosta usporilo koda bi se išlo u previše detalja.

Primeri: onCommentDisplay(Comment $comment). Recimo, plugin može da se subscribuje na ovaj događaj i u određenim uslovima spreči prikaz komentara ili promeni način na koji se isti renderuje. Ovo ne donosi samo novi nivo fleksibilnosti sistema, već i novi način kako da praviš sam sistem. Uvrnuto... Plaši me!

Btw, događaji su samo jedan od delova plugin sistema. Mislim da su jedan od najtežih za rešiti jer se protežu kroz kompletan sistem, ali osnovne stvari kao nasleđivanje abstraktnog plugina, struktura direktorijuma, rukovanje client side fajlovima (assets), dozvole, enable / disable - sve takođe važne stvari.

Poslednja izmena od Ilija Studen : 25. 08. 2006. u 21:55.
Ilija Studen je offline   Odgovorite uz citat
Staro 26. 08. 2006.   #7
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

bez event sistema pluginovi nemaju pravu moc, jer su ograniceni na to da ih sistem poziva pri ucitavanju, ili da cisto sluze kao externe biblioteke funkcija (ali onda je pitanje kako te funkcije pozivati ? )

Mislim da nasledjivanje abstraktnog plugina nije neophodno u varijanti gde je plugin zaduzen da se registruje, cak je tako flexibilnije jer autor plugina ima vecu slobodu da hakuje sistem bez izmena core fajlova. S druge strane ako zelis da aplikacija inicijalizuje pluginove, onda abstraktna klasa treba da propise interfejs koji ce svaki plugin naslediti, obicno su to 2 funkcije, jedna za inicijalizaciju plugina (koja prosledi objekat sa metodama za registraciju) i jedna koja vraca informacije o pluginu (tipa min. verziji aplikacije sa kojom radi, description i podatke o autoru).

Sto se dozvola tice to je vec vrlo komplikovano pitanje, jer ne znam kako mozes da sprecis plugin da pozove koju god zeli funkciju. Obicno se pluginovima veruje, to jest instaliras ih na sopstvenu odgvornost.
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 26. 08. 2006.   #8
Ilija Studen
Direktor Kombinata
Invented the damn thing
 
Avatar Ilija Studen
 
Datum učlanjenja: 07.06.2005
Poruke: 2.669
Hvala: 44
119 "Hvala" u 64 poruka
Ilija Studen će postati "faca" uskoroIlija Studen će postati "faca" uskoro
Default

Slažem se da je event sistem killer mogućnost koja daje ogromnu fleksibilnost. Par problema:

- red izvršavanja plugina koji su se subscribeovali na isti događaj
- da li dopustiti da plugin može da kaže: ja sam final, prekini izvršavanje bez obzira koliko još plugina je subscribeovano u redu
- šta se dešava kada se plugini pokolju? tj. kada jedan plugin ne očekuje izmene koje drugi odradi
Ilija Studen je offline   Odgovorite uz citat
Staro 26. 08. 2006.   #9
zira
Vladan Zirojević
Grand Master
 
Datum učlanjenja: 09.06.2006
Lokacija: Beograd/Trebinje
Poruke: 903
Hvala: 106
183 "Hvala" u 82 poruka
zira ima spektakularnu auruzira ima spektakularnu auruzira ima spektakularnu auru
Pošaljite ICQ poruku za zira Pošaljite poruku preko Skype™ za zira
Default

Mnogo je dobro kada redosljed nije bitan Ako jeste bitan, onda taj plugin koji zavisi od rezultata nekog drugog plugina ne bi mozda morao da reaguje na glavni event, vec na event da je ovaj uslovni zavrsio. U suprotnom se stvari zakomplikuju prilicno.

Recimo, moze se desiti da jedan plugin zavisi od drugog, pa onda mozes odrzavati informaciju za taj event koji plugini su uspjesno obavili posao za taj event, a koji nisu, i tu informaciju koristiti u njima. Tako bi mogao da rijesis i problem sa prioritetom, pa ako slucajno naidje na red plugin koji zavisi od nekog drugog, on moze zahtijevati da se taj prvo izvrsi (i zapamti da se izvrsio), pa onda tek on da zavrsi svoj posao. Onda se onaj uslovni ne bi trrebao ni izvrsavati jer je zapamceno da je on obavio posao vec.

U svakom slucaju, komplikacije na koje dosta aplikacija i ne obraca paznju
__________________
Donesi.com SrediMe
zira je offline   Odgovorite uz citat
Staro 26. 08. 2006.   #10
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

Citat:
Originalno napisao zira
Mnogo je dobro kada redosljed nije bitan Ako jeste bitan, onda taj plugin koji zavisi od rezultata nekog drugog plugina ne bi mozda morao da reaguje na glavni event, vec na event da je ovaj uslovni zavrsio. U suprotnom se stvari zakomplikuju prilicno.
Pa jeste, ali onda taj "uslovni" plugin mora da zna da postoji neki plugin koji od njega zavisi, sto obicno nije slucaj (cesto nisu ni isti autori). Po meni su takve stvari problem autora pluginova, a ne autora aplikacije. A i u 99% slucajeva moze da se zaobidje takva logika, tipa registruje se plugin za neki kasniji event, proverti da li postoji funkcija koja mu treba i slicno, a ne da se komplikuje logika glavne aplikacije sa milion mehanizama i provera..

Sto se tice pluginova mnogo jaka fora je i mogucnost da plugin redefinise core funkcije, u WP-u je to reseno kao pluggable funkcije. Sve biblioteke takvih funkcija se inkluduju nakon pluginova i kod svake funkcije se prvo proveri da li vec postoji funkcija sa takvim imenom, pa tek ako ne postoji sledi definicija. Tako mozes lako da izmenis ponasanje neke osnovne funkcije, a da posle upgrade aplikacije i dalje funkcionise skroz normalno..
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Odgovori



Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum

Slične teme
Tema Početna poruka teme Forum Odgovori Poslednja poruka
Zaposlenje u NSS / Sistem inženjer Ivan Poslovne ponude i zapošljavanje 0 09. 11. 2010. 17:16
Sistem plaćanja Q-voucher Dragan Varagić e-Business 11 18. 05. 2010. 21:01
Potreban sistem administrator Nikola Subotić Poslovne ponude i zapošljavanje 0 07. 03. 2007. 09:21
Web Operativni Sistem, You OS Zero-Cool Opušteno 2 23. 07. 2006. 21:59
[brainstrorming] Billing sistem bluesman SQL baze podataka - Sponzor: Baze-Podataka.net 2 10. 06. 2005. 01:38


Vreme je GMT +2. Trenutno vreme je 08:15.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.