|
![]() |
#1 |
Goran Pilipović
Sir Write-a-Lot
|
![]() 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:
PHP kôd:
PHP kôd:
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. |
![]() |
![]() |
![]() |
#2 |
Super Moderator
Invented the damn thing
Datum učlanjenja: 06.06.2005
Poruke: 2.371
Hvala: 370
701 "Hvala" u 194 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() 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).
|
![]() |
![]() |
![]() |
#3 |
Predrag Supurović
Grand Master
Datum učlanjenja: 24.01.2006
Lokacija: Užice
Poruke: 791
Hvala: 3
200 "Hvala" u 12 poruka
![]() ![]() ![]() |
![]() 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.
__________________
Peđina beležnica (blog) - www.uzice.net - wireless.uzice.net - www.vokabular.org - www.vodic.net - forum.uzice.net |
![]() |
![]() |
![]() |
#4 |
Ivan Dilber
Sir Write-a-Lot
|
![]() 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. |
![]() |
![]() |
![]() |
#5 |
Knowledge base
Wrote a book
Datum učlanjenja: 16.06.2005
Lokacija: Novi Sad
Poruke: 1.437
Hvala: 37
131 "Hvala" u 82 poruka
![]() ![]() |
![]() ^^ I agree, dokaz je na hiljade napisanih pluginova
__________________
Năo quero mais seguir um só caminho |
![]() |
![]() |
![]() |
#6 |
Direktor Kombinata
Invented the damn thing
Datum učlanjenja: 07.06.2005
Poruke: 2.669
Hvala: 44
119 "Hvala" u 64 poruka
![]() ![]() |
![]() 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.
__________________
activeCollab - Project Management and Collaboration Tool iz domaće kuhinje | area51.rs - Blog Poslednja izmena od Ilija Studen : 25. 08. 2006. u 21:55. |
![]() |
![]() |
![]() |
Alati teme | |
Način prikaza | |
|
|
![]() |
||||
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 |