You are not logged in.

  • Login

1

Sunday, November 21st 2010, 7:00pm

Plugin-System in PHP

Hi,
ich arbeite an einem Pluginsystem für eine Forensoftware. Alles klappt soweit, nur werden die Hooks (Einzelne Funktionen der Plugin-Klasse), die ich in die Dateien der Software bei der Installation des Plugins einfüge, natürlich bei jedem Update überschrieben.
Wie kann ich das lösen?

2

Monday, November 22nd 2010, 9:00pm

Die Installation eines Plugins verändert den Code der Forensoftware?

3

Tuesday, November 23rd 2010, 4:02pm

Wie könnte ich es sonst lösen?

4

Tuesday, November 23rd 2010, 5:27pm

naja, vergleich deinen Code mal mit gängigen CMS Systemen wie z.B. CakePHP.
Diese Systeme sind auch erweiterbar und sind klar getrennt zwischen Anwendung, Kern und Extensions.

In Dynamischen Sprachen ist es sehr leicht Erweiterungen nachzuladen, weil man Klassen dynamisch instanziieren kannst.

Beispiel: Tabelle content

Source code

1
2
3
id	type		text
1	text		Startseite
2	guestbook	--


Und schon kannst du $row['type'] nutzen um z.B. eine Klasse Gästebuch aus dem Extension Ordner zu laden.

PHP Quellcode

1
$instance = new $row['type']();


Weitere Plugin Möglichkeiten sind Eventlistener. Auch diese Events würden sich in die Datenbank einklinken.

Beispiel: Tabelle event

Source code

1
2
id	class		methode		target
1	Content		render		MyEventListener


PHP Quellcode

1
2
3
4
5
6
class Content {
	function render() {
		EventHandler::fire(get_class($this), __METHOD__);
 
		// do normal stuff
	}

5

Thursday, November 25th 2010, 5:32pm

Ah, danke, jetzt hab ichs kapiert ;)

6

Saturday, December 11th 2010, 12:03pm

Weil ich selber grade Plugins verabreiten muss, hatte ich mich auch nach der besten Lösung gefragt ;) Danke!

7

Saturday, December 11th 2010, 12:13pm

Bei mir würde eine Pluginklasse so aussehen:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Guestebuch extends Pion_Plugin {
 
public function bevorExecuteController() {
//xy
}
public function bevorExecuteView() {
//xy
}
public function afterExecuteView() {
//xy
}
 
// etc, je nachdem wieviele einschnitte man möchte
}

8

Saturday, December 11th 2010, 1:29pm

Wichtig auch, dass man die Priorität festlegt, wann welches Plugin kommt. Nicht das ein Plugin etwas filtern will, was schon lange durch ein anderes Plugin geändert/entfernt wurde.

Similar threads

Social bookmarks