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  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Aplikacje PHP - Pluginy
Sedziwoj
post 12.03.2008, 09:56:37
Post #61





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@specialplan
A dlaczego interfejsu plugin'u nie dasz w jakimś pliku konfiguracyjnym, po co bawić się w Reflection API, niech plugin sam powie co oferuje.
Wtedy obsługa każdej funkcjonalności też jest zawarta w plugin'ie, bo tak na prawdę tylko ten plugin wie co ma zrobić.
Czyli system news'ów wie jak ma dodać nowego, jak wyświetlić lokalizację też sam plugin wie. System nie powinien zajmować się niczym więcej jak umieszczeniem danych z plugin'a w odpowiednim miejscu i przekazywaniu mu tego czego potrzebuje.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
specialplan
post 12.03.2008, 10:19:59
Post #62





Grupa: Zarejestrowani
Postów: 206
Pomógł: 21
Dołączył: 1.09.2006
Skąd: Edinburgh

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


Klasa dziedziczaca po ReflectionClass sluzy jedynie do pobrania metod publicznych z danej klasy pluginu w celach wylistowania ich w panelu administracyjnym, by mozna bylo z poziomu formularza przypisywac dane funkcjonalnosci pluginu do, chociazby, konkretnych stron widoku. W zasadzie mozna by umiescic te same dane w pliku konfiguracyjnym, ale zdecydowalem sie na tworzenie ich "w locie". W zasadzie system "robi" wszystko, co napisales, wiec chyba przekonam mojego PM, ze nie ma sensu sie bawic w dynamizowanie rejestru.
Go to the top of the page
+Quote Post
LBO
post 13.03.2008, 16:27:13
Post #63





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Framework FLOW3 (który będzie służyć za bazę dla najnowszego TYPO3) poszedł o krok naprzód w "pluginizacji" aplikacji - używa aspektów.

Wydaje mi się, że warto na niego spojrzeć w kontekście tego tematu.

Pozdrawiam.

edit:

Dodam tylko, że FLOW3 nie używa zewnętrznych bibliotek AOP (Aspect Oriented Programming) - wszystko jest oparte o czystą implementację w PHP.

Ten post edytował LBO 13.03.2008, 16:27:50
Go to the top of the page
+Quote Post
tmgryf
post 25.08.2009, 12:25:29
Post #64





Grupa: Zarejestrowani
Postów: 79
Pomógł: 1
Dołączył: 14.02.2009

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


Troszke bardzo odkopię smile.gif

Może zle to wszystko zrozumialem, ale wiekszosc opisanych sposobow wtyczkowania mozna by prosto zastapic prostym wstawieniem include przed wyświetleniem odpowiedniej trsci...

myslalem sobie zeby podzielic strone na minisekcje (w gruncie rzeczy calkiem sporo ich by musialobyc) - np 'htmlheader', 'pageheader', 'menu', 'leftcolumn', leftcolumncontent' 'rightcolumn'.... 'gallerylist' 'galleryimagelist'... itd i trzymanie ich w zmiennych. Dalej wykorzystujac "hooki" (http://stackoverflow.com/questions/42/best-way-to-allow-plugins-for-a-php-application) dla kazdego z elementow wykonywac odpowiedniego hooka lekko go modyfikujac wzgledem tego artykulu.

I tak mamy atrzymalibysmy tablice sekcji sekcje[sekcja] oraz dwuwymiarowa tablice hookow w postaci plugin[sekcja][funkcja z hooka1,funkcja z hooka2...] no i pozniej cos w rodzaju:
foreach (sekcje => element)
if isset plugin[element]
foreach plugin[element] => funkcja)
funkcja();


Zastanawialem sie rowniez jakby mozna bylo to zoptymalizowac - konieczne byloby "cachowanie kodu wtyczek php" tzn - wtyczki mozna byloby wlaczac i wylaczac - po wlaczeniu wtyczki tworzony bylby plik cacheplugin.php zawierajacy "body" plikow wlaczonych wtyczek - ograniczyloby to zbedne przeszukiwanie katalogow w poszukiwaniu wtyczek do inicjowania i otwierania tych calych mas plikow.

A zeby wtyczki staly sie naprawde wtyczkami uzytkownik dostalby narzedzie do tworzenia wlasnych minisekcji poprzez np dodanie odpowedniego kodu cos ala template {#zrobmigalerie#} i tutaj pojawi sie problem rekurencji bo należałoby po kazdym odpaleniu wtyczki dla danej minisekcji odpalic cala liste od nowa bo moze sie okazac ze ostatnia wtyczka doda sekcje do ktorej dedykowana byla pierwsza opalona funkcja... ale mysle ze to juz bardziej problem implementacji calosci

Chcę to napisac smile.gif i dla tego sie chcialem spytac co o tym sadzicie?
Go to the top of the page
+Quote Post
tuner
post 19.01.2010, 14:17:31
Post #65





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 10.12.2004

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


Cytat(LBO @ 13.03.2008, 15:27:13 ) *
Framework FLOW3 (który będzie służyć za bazę dla najnowszego TYPO3) poszedł o krok naprzód w "pluginizacji" aplikacji - używa aspektów.

Także polecam przyjrzenie się temu rozwiązaniu, niezwykle kompleksowo pozwala zarządzać komponentami aplikacji.

Na swoim blogu zamieściłem wpis poświęcony pluginizowaniu i jako, że jest bardzo w temacie z przyjemnością linkuję.
Go to the top of the page
+Quote Post
wlamywacz
post 25.01.2010, 12:57:44
Post #66





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Witam!

Chciałbym zasięgnąć waszej rady odnośnie pluginów. Aktualnie tworze własnego cms i mam zamiar oprzeć go o pluginy. W moim systemie występują szablony, moduły i pluginy. Szablony jest to ogólny widok, w odpowiednie miejsca umieszczamy zmienne (zastosowanie smarty). Ważniejszą rolę odgrywają moduły, jest to treść przekazana do szablonu w jedną ze zmiennych. W modułach jest możliwość ustawienia "zaczepu" do plugina
  1. {module name="gallery" action="index"}
W pluginie zwracam treść która ma być wstawiona w to miejsce oraz sam plugin posiada uchwyt do szablony dzięki czemu mogę go dowolnie zmieniać z poziomu pluginu. Wywołanie pluginu następuje przed pasowaniem smarty a sam kod
  1. {module name="gallery" action="index"}
zamieniany jest na zmienną w której jest wynik działania modułu. Czy taki schemat jest dobry, czy macie jakieś porady? Poza tym myślę nad wprowadzeniem kolejki, dzięki czemu mógłbym wykorzystać takie moduły jak autoryzacja wybranych modułów czy pluginów. Z góry dziękuje z pomoc.

P.S. Możecie mi podpowiedzieć gdzie szukać informacji o zastosowaniu pluginów?

Ten post edytował wlamywacz 25.01.2010, 12:58:59
Go to the top of the page
+Quote Post
marcio
post 25.01.2010, 19:00:32
Post #67





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Poza tym myślę nad wprowadzeniem kolejki, dzięki czemu mógłbym wykorzystać takie moduły jak autoryzacja wybranych modułów czy pluginów


Po co bawic sie w kolejke jak mozna robic tak:

  1.  
  2. if($auth -> isLogged()) {
  3.  
  4. }
  5.  
  6. else {
  7.  
  8. $this -> forward('Authorization'); // lub $this -> forward('Authorization', 'Index');
  9.  
  10. }
  11.  


ja tak to widze chyba ze o czyms nie wiem.

Cytat
Możecie mi podpowiedzieć gdzie szukać informacji o zastosowaniu pluginów?


Zalezy co masz na mysli jako plugin ogolnie szukaj info na temat filtrow,pluginow,modulow,modularnosci,komponentow,widget'ow etc...

Co do reszty twojego dzialania pluginow to u mnie dziala to prawie tak samo mam glowny szablon(view) calej strony np lewe i prawe menu o do tego sordkowy kontent.

Potem mam klase ktora to glownego widoku "wstrzykuje" wynik komponentu/pluginu/widget'u.

Tyle ze w glownym widoku mam tylko:

  1.  
  2. <div>%lewemenu%</div>
  3.  


Itp i tam wrzucam wszystko na podstawie url'a.



--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
wlamywacz
post 25.01.2010, 19:23:20
Post #68





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Kolejka po to gdyż autoryzacja, logowanie itp. będzie również jako moduł który trzeba wywołać w odpowiednim momencie.
Go to the top of the page
+Quote Post
marcio
post 26.01.2010, 00:13:18
Post #69





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Moze ktos wytlumaczy jaka jest roznica pomiedzy kolejka zadan a robien forward() na dana akcje?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
XianN
post 26.01.2010, 11:57:39
Post #70





Grupa: Zarejestrowani
Postów: 57
Pomógł: 9
Dołączył: 12.11.2005
Skąd: ze wnowu?!

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


Cytat(marcio @ 26.01.2010, 00:13:18 ) *
Moze ktos wytlumaczy jaka jest roznica pomiedzy kolejka zadan a robien forward() na dana akcje?

Taka jak miedzy (uporzadkowana) lista rzeczy do zrobienia, a dowiadywaniem sie o nastepnym zadaniu po wykonaniu poprzedniego:)

W przypadku forward() metoda, ktora jest aktualnie wykonywana musi znac nastepna.
Jesli jest to lista, wystarczy, ze sie zajmie swoja robota, a decydowanie o tym 'kto, kiedy i gdzie?' pozostawi komu innemu. Lista daje tez duzo wieksza wygode, np w zmienianiu kolejnosci wykonywania zadan, dodawaniu nowych, etc.

Ten post edytował XianN 26.01.2010, 12:00:39


--------------------
Yes, sex is always the answer, it's never a question
Cos' the answers yes, oh the answers yes.
Not just a suggestion, if you ask the question
Then its always yes, yeah!
Go to the top of the page
+Quote Post
marcio
post 26.01.2010, 13:55:07
Post #71





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Musialbym to widziec w praktyce bo tak zabardzo nie jestem przekonany.

CHcialem jeszcze poruszyc temat o plugin'ach jako filtry.

Dokladnie do postu: http://forum.php.pl/index.php?s=&showt...st&p=347026 ktory wydaje sie najbardziej rozwiniety z tego teamtu jesli chodzi o filtry.

Tak jak mowilem wczesniej mam jeden glowny szablon gdzie sa wstrzykiwane wszystkie komponenty/pluginy/widgety i do tego mam klase ktora sprawdza czy dla danego komponentu/pluginu jest jaki filtr powiedzmy ze mamy komponent News a w nim metode ShowLastNews();

  1.  
  2. public function ShowLastNews() {
  3.  
  4.   //wszystkie operacje pobierania etc....
  5.  
  6.   return $txtNews;
  7.  
  8.  
  9.  
  10.  
  11. }
  12.  


Teraz by zalozyc filtr wystarczy w katalogu /plugins/filters/ utworzyc plik PFNews.php o takiej klasie:

  1.  
  2. <?php
  3.  
  4. class PFNews {
  5.  
  6.   public $ReturnTrueFunction = false; // wyswietlamy wynik zwracany poprzez metode komponnetu/klasy lub false gdy wynik filtru
  7.  
  8.   public function onLoad() { // Przed zaladowanie komponentu/pluginy
  9.  
  10.       return 'Poczatek<Br>';
  11.  
  12.   }
  13.  
  14.   public function on_News_pre_ShowLastNews() { // przed funckja Index komponentu/pluginy News
  15.  
  16.       return 'Przed funckja index<Br>';
  17.  
  18.   }
  19.  
  20.   public function on_News_post_ShowLastNews($html) { // po wykonaniu funckji Index komponentu/pluginu News tutaj robimy nasz bbcode dla prawdziwej zawartosci news'a
  21.  
  22.       return '<Br><b style="color:#FF0000;">'.$html.'</b>';
  23.  
  24.   }
  25.  
  26.   public function onUnload() { // Przed zakonczeniem dzialania filtru
  27.  
  28.       return '<Br>Koniec<Br>';
  29.  
  30.   }
  31.  
  32. }
  33.  
  34. ?>
  35.  


Jak dla mnie pomysl bomba chce zrobic jakis filtr nie musze ingerowac w kod jakiegos komponentu/pluginu tylko pisze do niego filtr.

Oczywiscie nie wszystkie metody musi implementowac filtr bo jego klasa nie uzywa interfejsu ani nic bo moze byc tylko tak ze filtr dla danego komponentu/pluginu bedzie potrzebowal tylko jedna funkcje.

Do tego mam glowny kontroler aplikacji ktora pobiera wszystkie komponentu/pluginy za pomoca modelu i wstawia caly wynik do glownego szablonu do tego jest klasa pomocnicza by sprawdzic filtry.
glowny Kontroler:


  1.  
  2. <?php
  3.  
  4. class Home extends Controller implements IController {
  5.  
  6.  
  7. public function __construct() {
  8.  
  9. parent::__construct();
  10.  
  11. }
  12.  
  13.  
  14. public function Index() {
  15.  
  16. $components = $this -> Home_Model -> getComponents($this -> routing -> getController());
  17. $componentsAction = $this -> routing -> getParams();
  18. $componentsAction = (count($componentsAction) == 0) ? 'Index' : $componentsAction[0];
  19.  
  20. $tab = $this -> plugins -> LoadPlugin($components, $componentsAction);
  21.  
  22. $this -> view -> AddVars($tab);
  23. echo $this -> view -> Layout('Home', 'view');
  24.  
  25.  
  26. }
  27.  
  28. }
  29.  
  30. ?>
  31.  
  32.  


jesli ktos chce zobaczyc tez klase pomocnicza prosze mowic.





--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
wlamywacz
post 26.01.2010, 15:23:39
Post #72





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


W serwisie istnieje akcja X oraz plugin Y,Z. Plugin Y odpowiada za autoryzacje (logowanie itp. sprawy), Z odpowiada za wyświetlanie formularza kontaktowe. W pluginie Y ustawiam aby został wywołany przed akcją X. Czy muszę przed każdym wywołaniem akcji ładować kolejki wszystkich pluginów aby sprawdzić czy któryś nie powinien zostać wywołany, oraz jak wygląda sprawa kolejności ich wywoływania ?
Go to the top of the page
+Quote Post
marcio
post 26.01.2010, 15:44:43
Post #73





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


EDIT:
Zle zrozumialem o ta kolejke chodzi o to: http://forum.php.pl/index.php?s=&showt...st&p=194058 czyli lancuchy akcji u mnie dziala to wlasnie mniej wiecej tak sorki ale na poczatu chyba przeczytalem bez zrozumienia.
Dziala to u mnie tak kolejka + filtry dla komponentow/pluginow:
  1. <?php
  2.  
  3. require_once('libraries/PluginFilter.php');
  4.  
  5. class Plugin {
  6.  
  7.  
  8. private $cfg;
  9.  
  10.  
  11. public function __construct() {
  12.  
  13. $this -> cfg = Loader::load('Cfg');
  14.  
  15. }
  16.  
  17. public function LoadPlugin($plugins, $action) {
  18.  
  19.  
  20. foreach($plugins as $key => $PluginName) {
  21.  
  22. if(file_exists(DIR_PLUGINS_CTRL.$PluginName.'.php')) {
  23.  
  24. require_once(DIR_PLUGINS_CTRL.$PluginName.'.php');
  25.  
  26. }
  27.  
  28. else if(file_exists(DIR_COMPONENTS_CTRL.$PluginName.'.php')) {
  29.  
  30. require_once(DIR_COMPONENTS_CTRL.$PluginName.'.php');
  31.  
  32. }
  33.  
  34. else {
  35.  
  36. Controller::Error(405);
  37.  
  38. }
  39.  
  40.  
  41. $obj = new $PluginName();
  42.  
  43. if(PluginFilter::CheckFilter($PluginName)) {
  44.  
  45. $html[$key] = $obj -> LoadFilter($PluginName);
  46. $PluginAction = (method_exists($obj, $action)) ? '_'.$action : '_'.$this -> cfg -> action;
  47. $html[$key] .= $obj -> $PluginAction();
  48. $html[$key] .= $obj -> RemoveFilter($PluginName);
  49.  
  50. }
  51.  
  52. else {
  53.  
  54. $PluginAction = (method_exists($obj, $action)) ? $action : $this -> cfg -> action;
  55. $html[$key] = $obj -> $PluginAction();
  56.  
  57. }
  58.  
  59.  
  60. }
  61.  
  62. return $html;
  63.  
  64. }
  65.  
  66.  
  67. }
  68.  
  69.  
  70. ?>

Co o tym myslicie?

Ten post edytował marcio 26.01.2010, 16:47:36


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Ormin
post 28.02.2010, 21:39:07
Post #74





Grupa: Zarejestrowani
Postów: 64
Pomógł: 0
Dołączył: 3.02.2009

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


Wzorzec obserwatora i wszystko jasne smile.gif
Go to the top of the page
+Quote Post
eai
post 24.03.2010, 11:04:13
Post #75





Grupa: Zarejestrowani
Postów: 367
Pomógł: 10
Dołączył: 20.05.2005

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


Temat, pluginów zależy od struktury systemu do którego chcemy go zastosować.

Po pierwsze trzeba określić strukturę naszego systemu, i wydzielić obszary na które mogą mieć wpływ pluginy.
Trzeba stworzyć abstrakcyjne klasy (dziedziczącę po abstrakcyjnej klasię np. Plugin), które będą miały wpływ na poszczególne sekcje w naszej aplikacji.

  1. abstract class Plugin { }


  1. abstract class PluginUsers extends Plugin {
  2.  
  3. public function showUser(UserModel $user, View $view) {}
  4. public function showUserList(UserModel $user, UserList $list, View $view) {}
  5. public function preSaveUser(UserModel $user) {}
  6. public function postSaveUser(UserModel $user) {}
  7. public function preLoginUser(UserModel $user) {}
  8. public function postLoginUser(UserModel $user) {}
  9. public function preLogoutUser(UserModel $user) {}
  10. public function postLogoutUser(UserModel $user) {}
  11. // ... itd
  12. }


Następnie w naszym systemie musi istnieć rejestr, w którym dane pluginy będą dodawane.
Podczas wywołania określonych operacji, system pobierałby odpowiedni plugin np. podczas edycji użytkownika, pobierałby wszystkie pluginy dziedziczące po PluginUsers, i wywoływał kolejno metody z tego pluginu odpowiadające obecnie wykonywanej akcji. np po zapisie zmian wywoływana byłaby metoda postSaveUser.

Tak naprawdę trzeba się zastanowić, co w naszym systemie będzie można za pomocą pluginów wykonać. Kolejny krok to napisanie odpowiednich metod w abstakcyjnym modelu a na końcu wywołanie tych metod i przekazanie odpowiednich argumentów, które dany plugin może miec dostęp.
Go to the top of the page
+Quote Post
paxton
post 25.03.2010, 23:52:48
Post #76





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Londyn, UK

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


Cos takiego jest sprytne, moze nie jest to porzadny system pluginow, ale moze ulatwiac sprawe przy pisaniu dodatków.

  1. public function loadInjections($name) {
  2. if(is_dir("injections/$name"))
  3. foreach (glob("injections/$name/*.php") as $injection) {
  4. include_once($injection);
  5. }
  6. else
  7. throw new exception("Could not load injections! Event Folder not found. ErrCode: 172610032010");
  8. }


Używam tego w mojej aplikacji, domyślam się ze szybkość skanownia nie jest najlepsza, ale nie narzekam. Tam gdzie chce aby były wprowadzane pluginy tam używam tej metody.

Innym rozwiązaniem są hooki.
Go to the top of the page
+Quote Post
Psychopath
post 11.04.2010, 16:35:33
Post #77





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 22.01.2006

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


Ja robię to nieco inaczej. Dodatki dzielę na "Language Pack", "Blocks" i "Modules".
Sprawa z "Language Pack" jest jasna (includuje plik z tłumaczeniem, które jest zawarte w tablicy).
"Blocks" to w moim przypadku bloki w menu, wygląda to tak, że folder z blokiem zawiera jeden plik z "kodem", a drugi, co ma wypisywać na stronie, to coś w stylu np: code.php zawiera klasę kalendarza, a index.php (w katalogu z blokiem ją inicjuję. Cały system jest bardzo prosty, funkcja obsługująca po prostu za każdym razem robi funkcję blockopen($tytuł_bloku_podany_w_PA), potem następuje zincludowanie index.php, a na końcu blockclose(). W panelu admina można dowolnie tworzyć bloki, nawet takie, które nie mają pliku code.php, bo zawierają np tylko informację typu "Dziś jest głosowanie...". Każdemu blokowi przydziela się id na podstawie którego jest pozycjonowany wyżej lub niżej innych bloków. Z poziomu panelu jest też możliwość dowolnej edycji kodu, jakby ktoś nie chciał się bawić w wrzucanie przez ftpa.
Z "Modules" sprawa jest troche bardziej skomplikowana. W kodzie modułu określone jest jakiego "typu" on jest, czy to plik zincludowany, który wykonuje tylko jakiś kod (np tworzenie logów i statystyk), czy też np. skrypt, który ma być umieszczony np nad stroną główną (pod logo strony, np losowanie cytatów), pod stroną, czy też jako strona inicjowana zmienną "modid", który po wpisaniu index.php?modid=3 przejdzie na wybraną stronę. Linki typu "modid" trzeba dodać samodzielnie, ale myślę, że jak się już dokończę moje wstępne kodzenie core.php to zrobię jakąś większą klasę z mini-api, które będzie mogło też dodawać linki do menu, a może nawet ingerować w inne bloki i moduły.
Go to the top of the page
+Quote Post
marcio
post 22.03.2012, 14:47:38
Post #78





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Witam czy ktos z was na dzien dzisiejszy zaimplementowal w pelni dzialajace pluginy w swoim systemie?

Poki co mam zaimplementowane komponenty i widget'y w pelni dzialajace razem z obsluga gosci czy cache'm calych ich ackji/blokow.

Zastanawiam sie nad pluginami(jako wtyczki do komponentow) czyli taki plugin komentarzy ktory mozna podpiac pod komponent News/Article/ForumPost o ile tego typu plugin nie sprawia mi raczej klopotow w jego implementacji to mam problem np z plugin'em Ankiety np.

Jak podpiac taki plugin ankiety pod news podczas pisania/edytowania danego wpisu?

Na jakiej zasadzie mam obsluzyc 2 formularze(1 do napisania/edycji news, 2 do ankiety)?

Samo "wstrzykniecie" takiego formualrza tez nie sprawia mi klopotu jednak nie wiem zbytnio jak obsluzyc 2 akcje naraz.

W przypadku komentarzy nie ma takiego problemu bo czytajac news dodajemy sam komentarz do niego i jest ok, jednak dodac news'a jak do niego dodac ankiete lub inny plugin?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
hind
post 23.03.2012, 11:03:26
Post #79





Grupa: Zarejestrowani
Postów: 142
Pomógł: 24
Dołączył: 30.03.2009
Skąd: Rokitno Szlacheckie

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


Dla kazdego pluginu wydzieliłbym przestrzeń danych (tak żeby dane z POST/REQUEST nie nachodził na siebie).
np żeby plugin "a" miał nienachodzące się nazwy z pluginem "b" czy też samym głównym procesem -> $_POST['plugin_a']['nazwa_ankiety'], $_POST['main']['nazwa_newsa']


Dodać akcje przygotowawcze (pre) i wykończeniowe (post) tak, aby wywalić błędy i przerwać główny proces (jw. dodać newsa/komentarz), a potem przesłać pełny kontekst głównego procesu do pluginu aby dalej obsłużyć żądania (post).

Problemem jest sam moment uruchomienia pluginu, czy ma być wczytywany zawsze (z konfiguracji), czy też doczytany w pewnym konkretnym momencie (uzupełnienie strony przez XHR?)

W tym wypadku, główny proces nawet nie musi wiedzieć że będą uruchamiane jakieś pluginy, bo będą to akcje poboczne (tak jak w obserwatorze, podpiętym do danego typu zdażenia).
Go to the top of the page
+Quote Post
marcio
post 23.03.2012, 13:52:06
Post #80





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Dla kazdego pluginu wydzieliłbym przestrzeń danych (tak żeby dane z POST/REQUEST nie nachodził na siebie).
np żeby plugin "a" miał nienachodzące się nazwy z pluginem "b" czy też samym głównym procesem -> $_POST['plugin_a']['nazwa_ankiety'], $_POST['main']['nazwa_newsa']

Stosuje konwencje ze w pluginach przed nazwami zmiennych daje "p" zeby nie kolidowaly ze soba.

Cytat
Dodać akcje przygotowawcze (pre) i wykończeniowe (post) tak, aby wywalić błędy i przerwać główny proces (jw. dodać newsa/komentarz), a potem przesłać pełny kontekst głównego procesu do pluginu aby dalej obsłużyć żądania (post)

Cytat
Problemem jest sam moment uruchomienia pluginu, czy ma być wczytywany zawsze (z konfiguracji), czy też doczytany w pewnym konkretnym momencie (uzupełnienie strony przez XHR?)

Ja to robie tak ze plugin moze byc ladowany przed lub po komponencie, gdzie do akcji komponentu dolaczam akcje pluginu.
Np majac akcje "readNews" do ktorej chce podczepic plugin comment mam taki config komponentu News, aktywuje plugin w bazie a config sprawdza tylko czy w ogole obiekt(w tym przypadku news) moze posiadac w ogole plugin comment:
  1. <?php
  2.  
  3. /**
  4. *Volta framework
  5.  
  6. *@author marcio <opi14@op.pl>, <polishvodka7@gmail.com>
  7. *@copyright Copyright (c) 2012, marcio
  8. *@version 1.0
  9. */
  10.  
  11. $configs['guest'] = 1;//1 - on / 0 - off
  12. $configs['cache'] = 0;// 1 - on / 0 - off
  13. $configs['cached_action'] = array('Index');
  14. $configs['lifetime'] = 10800;//time in sec
  15. $configs['admin_panel'] = 1;//1 - on / 0 - off
  16.  
  17. $configs['plugins_settings'] = array(
  18. 'after' => array('readNews' => array(
  19. 'comment' => array(
  20. 'segment_ref' => 0,
  21. 'actions' => array('submit', 'delete')
  22. )
  23. )
  24. )
  25. );
  26.  
  27. return $configs;
  28.  
  29. ?>

Cytat
W tym wypadku, główny proces nawet nie musi wiedzieć że będą uruchamiane jakieś pluginy, bo będą to akcje poboczne (tak jak w obserwatorze, podpiętym do danego typu zdażenia)

Dokladnie akcje pluginu sa podpinane pod akcje komponentu i komponent do ktorego sa podpinane nie ma z plugin'em nic wspolnego


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post

5 Stron V  « < 2 3 4 5 >
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 Wersja Lo-Fi Aktualny czas: 27.04.2024 - 19:31