Ik ben bezig met een eigen CMS systeem dat gebaseerd is op het CodeIgniter framework. Bij dit CMS systeem horen natuurlijk ook plugins, het aparte aan mijn CMS systeem is dat elke plugin positie apart getweaked kan worden. Een voorbeeld:
Op een pagina wil ik een contactformulier laden, op de plaats waar het formulier moet komen staat dan {PLUGIN_ITEM_25}. Het id 25 slaat op een rij in de database met daarin de bijhorende plugin, functie en eventuele settings.
In dit voorbeeld is het:
Plugin: cms_plugin_contact
Functie: show_form
Settings: -
Bij het renderen van de pagina wordt {PLUGIN_ITEM_25} doorgestuurd naar een model plugin en de functie get_html_by_pluginitem(). Deze functie haalt de bijbehorende gegevens op uit de database en laad vervolgend de plugin (een model).
Dit gaat allemaal nog goed, maar vervolgens moet er een functie worden aangeroepen in het geladen model. Maar omdat de naam van de geladen plugin en de functie opgeslagen staan in een variabel heb ik geen idee hoe ik die nu weer moet aanspreken.
Op een pagina wil ik een contactformulier laden, op de plaats waar het formulier moet komen staat dan {PLUGIN_ITEM_25}. Het id 25 slaat op een rij in de database met daarin de bijhorende plugin, functie en eventuele settings.
In dit voorbeeld is het:
Plugin: cms_plugin_contact
Functie: show_form
Settings: -
Bij het renderen van de pagina wordt {PLUGIN_ITEM_25} doorgestuurd naar een model plugin en de functie get_html_by_pluginitem(). Deze functie haalt de bijbehorende gegevens op uit de database en laad vervolgend de plugin (een model).
Dit gaat allemaal nog goed, maar vervolgens moet er een functie worden aangeroepen in het geladen model. Maar omdat de naam van de geladen plugin en de functie opgeslagen staan in een variabel heb ik geen idee hoe ik die nu weer moet aanspreken.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| <?php class cms_core_plugin extends Model{ var $item_cache = array(); var $plugin_cache = array(); var $error = false; function cms_core_plugin() { parent::Model(); } function get_html_by_pluginitem( $plugin_item_id = false ) { if( array_key_exists($plugin_item_id, $this -> item_cache) ) { $item_data = $this -> item_cache[$plugin_item_id]; }else{ $item_data = $this -> get -> plugin_item_data($plugin_item_id); $this -> item_cache[$plugin_item_id] = $item_data; } if( !$item_data ) { $this -> set_error('Er kon geen item (plugin) gevonden worden'); return false; } if( array_key_exists($item_data['plugin'], $this -> plugin_cache) ) { $plugin_data = $this -> plugin_cache[$item_data['plugin']]; }else{ $plugin_data = $this -> get -> plugin_data($item_data['plugin']); $this -> plugin_cache[$item_data['plugin']] = $plugin_data; } $read_settings = simplexml_load_string( $item_data['settings'] ); $settings = $read_settings -> children(); if( !array_key_exists('function', $settings) ) { $this -> set_error('Geen functie instelling gevonden bij het item'); return false; } $function = $settings['function']; $model = substr( $plugin_data['model'], 0, -4); //Dit is de naam van de plugin (model) die geladen moet worden, in ons voorbeeld dus cms_core_plugin $CI =& get_instance(); //Laad het super-object van CI $CI -> load -> model($model); //Laad het nieuwe model //Tot hier gaat alles nog goed maar dan moet ik de plugin en functie aanroepen //Wat is wil is zeg maar het volgende: return $this -> $model -> $function(); //Maar dit werkt natuurlijk niet } function set_error( $error = false ) { $this -> error = $error; return false; } function get_error() { return $this -> error; } } |
[ Voor 15% gewijzigd door Dimby op 24-07-2010 09:29 ]