Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa pluginow jako filtry
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcio
Witam mam taki mini problem szukalem informacji na temat pluginow jaki filtry tzn jak dawac hooki albo napisac odpowiedni dekorator etc... bylo duzo metod na zrobienie tego jednak napotkalem sie na 2 ciekawe arty jeden po eng drugi po pl i wykorzystalem ich dzialanie.

System pluginow dziala system filtrow tez ale w 90% poniewaz nie zgadza mi sie kolejnosc funkcji.

Moja klasa filtrow:
  1. <?php
  2.  
  3. class PluginFilter {
  4.  
  5. private static $LoadPlugins = array();
  6. private $cfg;
  7.  
  8. public function __construct() {
  9.  
  10. $this -> cfg = Loader::load('Cfg');
  11.  
  12. }
  13.  
  14.  
  15. public function LoadFilter($PluginFilter) {
  16.  
  17. if(file_exists(DIR_PLUGINS_FILTERS.$PluginFilter.'.php')) {
  18.  
  19. require_once(DIR_PLUGINS_FILTERS.$PluginFilter.'.php');
  20.  
  21. }
  22.  
  23. $object = new $PluginFilter();
  24. self::$LoadPlugins[$PluginFilter] = new $PluginFilter();
  25. if(method_exists($object, 'onLoad')) $object -> onLoad();
  26.  
  27. }
  28.  
  29.  
  30. public function RemoveFilter($PluginFilter) {
  31.  
  32. if(!empty(self::$LoadPlugins[$PluginFilter])) {
  33.  
  34. $object = self::$LoadPlugins[$PluginFilter];
  35. if(method_exists($object, 'onUnload'))
  36. $object -> onUnload();
  37. unset(self::$LoadPlugins[$PluginFilter]);
  38.  
  39. }
  40.  
  41. }
  42.  
  43.  
  44. public function AddEvent($method, $params) {
  45.  
  46. foreach(self::$LoadPlugins as $NameFilter => $ObjFilter) {
  47.  
  48. if(method_exists($ObjFilter, $method)) {
  49.  
  50. call_user_func_array(array($ObjFilter, $method), $params);
  51.  
  52. }
  53.  
  54. }
  55.  
  56. }
  57.  
  58. public function __call($method, $params) {
  59.  
  60. if(method_exists($this, '_'.$method)) {
  61.  
  62. $this -> AddEvent('on_'.get_class($this).'_pre_'.$method, $params);
  63.  
  64. $funcResult = call_user_func_array(array($this, '_'.$method), $params);
  65.  
  66. $this -> AddEvent('on_'.get_class($this).'_post_'.$method, $funcResult);
  67.  
  68. return $funcResult;
  69.  
  70. }
  71.  
  72. }
  73.  
  74. }
  75.  
  76. ?>


Klasa bazowa uruchomiajaca plugin:
  1. <?php
  2.  
  3. require_once('libraries/PluginFilter.php');
  4.  
  5. class tester extends PluginFilter {
  6.  
  7. public function _test($arg) {
  8.  
  9. return '<b>'.$arg.'</b><Br>';
  10.  
  11. }
  12.  
  13. }
  14.  
  15. $test = new tester();
  16. $test -> LoadFilter('testplug');
  17. echo $test -> test('cos');
  18. $test -> RemoveFilter('testplug');
  19.  
  20. ?>

A tu klasa filtru:
  1. <?php
  2.  
  3. class testplug {
  4.  
  5. public function onLoad() {
  6.  
  7. echo('Poczatek<Br>');
  8.  
  9. }
  10.  
  11. public function on_tester_pre_test() {
  12.  
  13. echo('Przed funckja test<Br>');
  14.  
  15. }
  16.  
  17. public function on_tester_post_test($code) {
  18.  
  19. echo('<p style="font-size:18px;"><i>'.$code.'</i></p>');
  20.  
  21. }
  22.  
  23. public function onUnload() {
  24.  
  25. echo('Koniec<Br>');
  26.  
  27. }
  28.  
  29. }
  30.  
  31. ?>

I dane wyjsciowe:
Cytat
Poczatek
Przed funckja test
cos


cos
Koniec

No i jak widac nie zgadza sie wykonanie funkcji POST poniewaz wyswietla sie powiekszony tesk i pochylony jako 3 a nie jakos 4 w kolejnosci.

Tutaj jest to pokazane: http://marcio.ekmll.com/test.php

Dziekuje za odp.
kfc4
A czy możesz podlinkować te artykuły?
marcio
http://www.sitepoint.com/forums/showthread.php?t=379440 topic o tym.

http://www.w3style.co.uk/?p=9 art

http://stackoverflow.com/questions/42/best...php-application hooki

http://carbolymer.ovh.org/wp/?p=15

http://carbolymer.ovh.org/wp/?p=18

http://mureakuha.com/koodikirjasto/791 art




i jeszcze to http://forum.php.pl/index.php?showtopic=34190&st=40 




Poskladalem wszystko do kupy jak mi pasowalo i wsio dziala komponenty i pluginy sie laduja wszystko pisalem sam i do tego dzialaja tez pluginy jako filtry dla komponentow lub pluginow.




Jesli chcesz moge przeslac ci caly system.




P.S pozostaje tylko problem z kolejnoscia tych 2 funkcji ale mam juz pomysl jak to objesc.
kfc4
Tak, poprosił bym jeśli można.
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.