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:
<?php
class PluginFilter {
private $cfg;
public function __construct() {
$this -> cfg = Loader::load('Cfg');
}
public function LoadFilter($PluginFilter) {
if(file_exists(DIR_PLUGINS_FILTERS
.$PluginFilter.'.php')) {
require_once(DIR_PLUGINS_FILTERS.$PluginFilter.'.php');
}
$object = new $PluginFilter();
self::$LoadPlugins[$PluginFilter] = new $PluginFilter();
if(method_exists($object, 'onLoad')) $object -> onLoad();
}
public function RemoveFilter($PluginFilter) {
if(!empty(self::$LoadPlugins[$PluginFilter])) {
$object = self::$LoadPlugins[$PluginFilter];
if(method_exists($object, 'onUnload'))
$object -> onUnload();
unset(self::$LoadPlugins[$PluginFilter]);
}
}
public function AddEvent($method, $params) {
foreach(self::$LoadPlugins as $NameFilter => $ObjFilter) {
if(method_exists($ObjFilter, $method)) {
call_user_func_array
(array($ObjFilter, $method), $params);
}
}
}
public function __call($method, $params) {
if(method_exists($this, '_'.$method)) {
$this -> AddEvent('on_'.get_class($this).'_pre_'.$method, $params);
$funcResult = call_user_func_array
(array($this, '_'.$method), $params);
$this -> AddEvent('on_'.get_class($this).'_post_'.$method, $funcResult);
return $funcResult;
}
}
}
?>
Klasa bazowa uruchomiajaca plugin:
<?php
require_once('libraries/PluginFilter.php');
class tester extends PluginFilter {
public function _test($arg) {
return '<b>'.$arg.'</b><Br>';
}
}
$test = new tester();
$test -> LoadFilter('testplug');
echo $test -> test('cos'); $test -> RemoveFilter('testplug');
?>
A tu klasa filtru:
<?php
class testplug {
public function onLoad() {
}
public function on_tester_pre_test() {
echo('Przed funckja test<Br>');
}
public function on_tester_post_test($code) {
echo('<p style="font-size:18px;"><i>'.$code.'</i></p>');
}
public function onUnload() {
}
}
?>
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.phpDziekuje za odp.