Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

5 Stron V   1 2 3 > »   
Reply to this topicStart new topic
> Aplikacje PHP - Pluginy
Vengeance
post 9.08.2005, 12:42:33
Post #1





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Witajcie,

Były już długie dyskusje o MVC, jeszcze dłuższe o budowie jądra...
Proponuje by rozpocząc dyskusje na temat, jak w naszej aplikacji umożliwić programiście piasnie dowolnych rozszerzeń. Chodzi mi o Pluginy.

Niektóre skrypty (phpBB) rozwiązują to na zasadzie zwykłej edycji kodu,
inne (WordPress) udostępniają specjalne API. Jak Wy widzicie budowe takiego systemu?

Powiesz szczerze, że nigdy nad takim czymś nie myślałem i nie robiłem nic w tym rodzaju więc w pierwszym poscie nie opisze swojego sposobu, bo go po prostu nie mam. Licze na Waszą inwencję i na to iż temat się przyjmie :]

Czyli podsumowując:
Jak stworzyć dobre API dla Pluginów.


--------------------
Go to the top of the page
+Quote Post
NuLL
post 9.08.2005, 19:51:47
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Co rozumiesz jako plugin ? Uniwersalnego API dla pluginów w całej aplikacji nie napisz smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Vengeance
post 9.08.2005, 19:55:37
Post #3





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Dla przykładu Blog który pisze teraz...

Plugin, np:
Kalendarz,
Modyfikator BBCode dla tekstu
i inne bzdety :]


--------------------
Go to the top of the page
+Quote Post
ebe
post 9.08.2005, 20:37:50
Post #4





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

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


Albo w formie koszyka do cms'a przekształcający go w sklep. Tak aby user nie musiał nic robić (w sensie modyfikacji kodu) tylko kliknął sobie i doinstalował plugin. Innym przykładem jest plugin komentarzy umożliwiający komentowanie obiektów (np. artykułów, newsów) W tej chwili jeszcze nad tym nie myślę ale za kilka dni/tygodni będę miał z tym kłopot.


--------------------
Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
Go to the top of the page
+Quote Post
Ace
post 9.08.2005, 21:49:33
Post #5





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


jedyne co mi przychodzi do glowy, to kolejka.

Dodajemy kolejne pluginy do jakiejs kolejki i uruchamiamy jeden po drugim na danych wejsciowych.

np:
wyswietlanie obiektow - plugin przechwytuje caly obiekt TRESC, i ma za zadanie zamienic bbcode na html...

chcesz uruchomic ten plugin wrzucasz odpowiadnia klase do odpowiedniego katalogu a konfigurator sprawdza czy plugin istnieje jesli tak to go automatycznie uruchamia.

Osobiscie nie korzystam z tego rozwiazania - wogole nie korzystam z pluginow, bo nie wiedzialem jak sie do tego zabrac, wiec tak tylko teoretyzuje. Mam nadizeje ze ktos przedstawi lepszy poglad na to.

lecz hm. plugin do np: komentarzy dla newsow, czy jakiegos innego typu contentu, to trzeba by bylo przechwycic zdarzenie ze wyswietla sie news, pozniej dodac do tej strony w jakis sposob formularz, a dane z formularza do jakiejs akcji trzeba przeslac po czym wrocic na poprzednia strone - trzeba by bylo stworzyc po prostu dobra klase do pluginow, ktora w sobie mialaby mozliwosc przechwycenia aktualnei uruchomionej akcji, dodania "czegos" do strony w tym wypadku formularza, oraz dodania akcji ktora ma zostac pozniej uruchomiona. Glownie caly system pluginow musialby sie opierac o funkcje dostepne w systemie, a kolejny plugin, to po prostu wykorzystanie tych funkcji.

(cala powyzsza tresc zostala napisana przed chwila, nie wdrazalem tego rozwiazania - teoria wymyslona na szybko)
Go to the top of the page
+Quote Post
treewood
post 10.08.2005, 13:54:08
Post #6





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


W projekcie Quick.Cart wykorzystalismy takie myslenie iz pluginy powinna robic osoba, ktora sie zna na kodzie php. Ma to kilka waznych argumentow:
- aplikacja bedzie dzialac poprawnie
- aplikacja ma nie byc zwalniania zbytnio przez pluginy (czym wiecej wyjatkow itd tym gorzej)
- aplikacja ma zachowac prostote i przejzystosc kodu
- pelna automatyzacja przez (przycisniecie klawisza "instaluj plugin") nie jest najlepsza. zbyt duze ryzyko wczesniejszej zmiany kodu przez uzytkownikow

Co prawda system pluginow przemyslelismy na szybko to do tego czasu nie dokonalbym zbyt wielu jego modernizacji

U nas dziala to w taki sposob iz kazda funkcje mozna zastapic gdyz przed jej nazwa podajemy if( !function_exists( 'nazwaFunkcji' ) ).
By sprawdzic dzialanie takich pluginow wystarczy sciagnac Quick.Cart'a i popatrzec sie jak to wyglada.

W tym projekcie powstalo kilkadziesiat pluginow NIE NASZEGO autorstwa z ktorym wielu sobie bardzo dobrze radzi i nie ma wiekszych problemow z ich instalacja.

Gdybym mial gwarancje, ze kod php nie bedzie zmieniany przez innych to stworzylbym automaty, ktore same zmienialyby kod php tak by aplikacja byla jeszcze wydajniejsza bez zbednych dodatkowych wyjatkow.


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
treewood
post 10.08.2005, 15:05:04
Post #7





Grupa: Zarejestrowani
Postów: 215
Pomógł: 0
Dołączył: 18.01.2003

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


dodam jeszcze to, ze gdzies tu na forum ktos kiedys pisal o wlasnym systemie pluginow. taki cos, ze w jednym pliku definiuje co sie zmienilo, co gdzie dodac, co gdzie usunac i skrypt analizujac dany plik robi zmiany.


--------------------
Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
Go to the top of the page
+Quote Post
mynio
post 17.08.2005, 19:39:04
Post #8





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 25.03.2005

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


tutaj jest coś o pluginach
http://www.phpdeveloper.org/section/tutorials/55

co prawda mało profesjonalne, ale zawsze coś

pzdr
Go to the top of the page
+Quote Post
ennics
post 5.10.2005, 13:37:03
Post #9





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

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


Cytat
Gdybym mial gwarancje, ze kod php nie bedzie zmieniany przez innych to stworzylbym automaty, ktore same zmienialyby kod php tak by aplikacja byla jeszcze wydajniejsza bez zbednych dodatkowych wyjatkow.


hmm, myślę że dałoby się ten problem rozwiązać poprzez określenie interfejsu dla danych pluginów np. proste
  1. <?php
  2.  
  3. class nowyPlugin implements pluginFactory { }
  4.  
  5. ?>

interfejs pluginFactory określałby funkcje które użytkownik musi zaimplementować do swojego pluginu.
dodatkowo można ograniczyć ingerencję pluginów w nasz kod poprzez deklarację
metod które chcemy chronić jako private.


--------------------
Go to the top of the page
+Quote Post
Diwi
post 29.10.2005, 14:37:09
Post #10





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Tak więc lekko odświeże temat. Czy komuś udało się już opracować jakiś system do obsługi wtyczek ?

Pozdrawiam
Go to the top of the page
+Quote Post
Ociu
post 30.10.2005, 11:57:11
Post #11





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Obejrz sobie wtyczki w dotclearze.
pozdrawiam
Go to the top of the page
+Quote Post
evo
post 14.11.2005, 22:50:51
Post #12





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

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


polecam system pluginow rozwiazany w eclipse. Przejzec i przeportowac na wlasne potrzeby do php


ja pisze wlasnie teraz cos takiego a wlasciwie content manager z API do pluginow dla specializowanej zawartosci.

O co w tym chodzi:

Daje do dyspozycji strukture podzialu zawartosci plus jadra systemu z outputem (html,pdf,xml,txt). Oczekuje od pluginu udostepnienia wszystkich plikow zawarty w specyfikacji pluginow takich jak templates,config files itd.. oraz laduje plugin poprzez instanciowanie klasy o taj samej nazwie co plugin w podkatalogu znajdujacym sie w katalogu pluginow danego pluginu. winksmiley.jpg

Ta classa (ten objekt) musi byc dziedziczona od mojego Interfaceu CMPlugin ktory daje nam funkcje do operacji takich jak przeszukiwanie , edytowanie,usuwanie,dodawanie oraz wyswietlanie zawartosci.

Projekt musze napisac do 17 Stycznia, wiec mysle ze po tej dacie udostepnie go.



Pozdrawiam
evo

Ten post edytował evo 14.11.2005, 22:52:04
Go to the top of the page
+Quote Post
Ociu
post 15.11.2005, 15:37:50
Post #13





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Ja myśle, że nie będe używał żadnych BBCode (taką przynajmniej mam nadzieje), dlatego u mnie wszystko działa metodą łańcuchową, a system uruchamia się poprzez:
  1. <?php
  2. $CORE->systemStart( new Application(), new HttpRouter(new HttpRequest, new HttpResponse) ); 
  3. ?>
.
Dlatego myśle, ze można coś zrobić tak:

  1. <?php
  2. class PluginManager {
  3. private static $map = array();
  4. public function add($plugin, $parametr = false) {
  5. self::$map[$plugin] = ($parametr === false) ? $plugin : $parametr;
  6. }
  7.  
  8. public function loadAll() {
  9. foreach(self::$map AS $plugin => $parametr) {
  10. if($plugin == $parametr) {
  11. $pl = new $plugin();
  12. } else {
  13. $pl = new $plugin($parametr);
  14. }
  15. }
  16. }
  17. ?>


Myśle, że to najprostrze rozwiązanie jakie może być i do tego dobre winksmiley.jpg
pozdrawiam
Go to the top of the page
+Quote Post
bela
post 15.11.2005, 16:41:09
Post #14


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Ociu, ok, ale załadowałeś i co teraz zrobisz? Jak wpłyniesz na kształt czegoś?


--------------------
Go to the top of the page
+Quote Post
Ociu
post 15.11.2005, 16:45:34
Post #15





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Przed chwilą prześmyślałem to co napisałem i stwierdzam, że kod działa, ale jako loader załadowanie. Aby plugin był użyteczny, trzeba ingerować w kod klas.

Jak narazie to nie mam pomysłu.
Go to the top of the page
+Quote Post
ActivePlayer
post 19.11.2005, 20:33:41
Post #16





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


do tego dochodzą jeszcze zaleznosci... bo mamy np. plugin komentarzy obiektow, i plugin bb codu... ale jako 2 osobne... jesli plugin komentarzy nie jest zainstalowany, to nie pokazujemy bb code w komentarzach, w przeciwnym wypadku pokazujemy. do tego przydalo by sie jakos konfigurowac, bo przeciez ktos moze nie chcec bb code w komentach, tylko np. w samych newsach czy gdziekolwiek indziej...
Go to the top of the page
+Quote Post
Degregar
post 21.11.2005, 14:46:00
Post #17





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.12.2003

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


Pracuję właśnie nad framework'iem, w którym mam zamiar uwzględnić system ładowania pluginów.
W poprzednim CMSie plugin'em była po prostu klasa w jakimś module. Ale teraz dochodzę do wniosku, że poszerzę system katalogów modułu (wcześniej module/action) do module/submodule/action i jeden moduł będzie nosił nazwę 'plugins', gdzie będę mógł załadować potrzebne mi pluginy.
Potem tylko w edytorze template'a wpisuję odpowiednią linijkę ( np. <plugin>kalendarz</plugin> ), zmiany zapisywane są w pliku konfiguracyjnym i poprzez filtry (w moim przypadku services) sprawdzam w configu, czy do danego template'a jest przypisany jakiś plugin, dodaję do łańcucha akcji i tyle.
PluginManager również można tutaj wykorzystać zamiast np. action chain.

Generalnie możliwości jest sporo, wszystko zależy od budowy aplikacji. Nie ma jakiegoś uniwersalnego sposobu.

Co do zmiany bbcode na html, to najlepiej na filtrach (jeśli mowa o MVC przede wszystkim) - przed wykonaniem akcji sprawdzamy w konfigu, czy dana akcja ma być filtrowana (bbcode na html), jeśli tak, to po wykonaniu akcji pobieramy wynik kodu i filtrujemy.
Go to the top of the page
+Quote Post
seaquest
post 21.11.2005, 21:46:26
Post #18





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


A ja myślę, że trzeba trochę połączyć wszystkie te rozwiązania. Bardzo dobrym pomysłem wydaje mi się kolejka. To bardzo dobre rozwiązanie. Problem pojawia się jednak, gdy kilka pluginów dotyczy jednego rodzaju treści.
Ja bym zrobił tak. Jedną obiekt klasy Content, który będzie przechowywał dane wyciągnięte z bazy. Później zakładamy kolejkę, w której umieszczamy najpierw klasę odpowiadającą za podstawowe interpretowanie treści, a następnie kolejne pluginy (powiedzmy według przypisanej im wagi, bo to też czasem ważne). Później kolejno wywołujemy jakąś metodę (tak samo nazwaną we wszystkich klasach).
Konkludując. Potraktujmy podstawowe opracowywanie treści jako plugin o najwyższej wadze!
Co wy na to?


--------------------
Michał Płachta
Warsztat: Mac OS X Leopard, PostgreSQL, Text Mate, Retrospectiva + SVN
Go to the top of the page
+Quote Post
Ace
post 22.11.2005, 09:40:58
Post #19





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


hm, mysle ze to jest sensowne, ale w chwili obecnej rozmyslalismy o pluginie ktory bedzie pelnil funkcje filtru na jakis content.

Co w wypadku gdy chcemy dograc plugin do koszyka ktory nam umozliwi platnosci online, chodz moze ograniczmy problem do dodawania nowych form platnosci. Wiec - mamy w systemie powiedzmy cos co pelni funkcje platnosci i mamy mozliwosc dogrywania w bardzo prosty sposob nowych form platnosci.

Jak to zrealizowac? Tez kolejka w ktorej bedziemy mieli liste platnosci, wybierzemy jedna, to uruchomimy odpowiednia klase, a wniej odpowiednie metody? Jak to sobie wyobrazacie?

Mysle ze warto by bylo omowic kilka takich problemow.

Pozdrawiam
Go to the top of the page
+Quote Post
Vengeance
post 22.11.2005, 15:37:41
Post #20





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


A co jeśli chcemy napisać plugin do pluginu będącego pluginem innego pluginu naszej aplikacji? snitch.gif rotfl!


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

5 Stron V   1 2 3 > » 
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.03.2024 - 10:22