Next | ||
Insertion d'un webbug "phpOpenTracker" |
Les blocs sont un niveau d'abstraction permettant de placer du contenu dynamique d'une façon arbitraire dans une page PHP. On peut non seulement éditer le contenu du bloc de façon dynamique, mais décider où il sera placé. Le bloc est donc "self-contained", c'est à dire qu'il sait comment s'afficher et comment se configurer.
Le contenu du bloc peut être statique (écrit dans le code) ou dynamique (géré par une DB), par exemple en sous-classant ecdTable.
Les Blocs sont groupés en Pages. Les Pages précisent dans quel ordre se retrouvent les blocs, et quelles sont leurs clefs ($keys). Ainsi, une table Pages ressemblerait à:
+--------+--------+ | Champ | Type | +--------+--------+ | page | int | | order | int | | type | string | | block | string | +--------+--------+Le champ block est un serialisation de l'array $keys passé en paramètre pour créer l'objet "type". Par exemple:
$keys = array( 'id' => 1 ); $type = "ecdCapsule"; $c = new $type($keys);$c est le block à montrer.
Aucun champ n'est unique. Pour regrouper des blocks en une seule, il suffit de de leur donner le même entier au champ "page".
Le système des blocs sera fondé sur le principe des "hooks". Tout bloc devra fournir l'interface suivante:
<? class Block { /* * create the block interface, loading the correct instance of it * * @param $keys keys identifying this block, null means create */ function Block($keys = null) {} /* return this block configuration form */ function form() { return "<form></form>"; } /* receive the paramters chosen in the form * * null means no error, a string is the error text * * @param $keys keys identifying this block, null means create * @param $GET_POST data from the above form */ function save_form($GET_POST) { return null; } /* return the block's content */ function print_block() { return ""; }} ?>Pour configurer un bloc particulier, il suffira de créer un objet Block approprié, grâce à son type et ses clés.
Exemple:
<? class Actualite extends ecdCapsule { function form() { return "<form> <input type=\"hidden\" name=\"nid\" value=\"<?=$this->get('nid')?>\"> <input type=\"text\" name=\"nouvelle\"> <input type=\"submit\"> </form>"; } function save_form($vars) { /* * note: ecdTable doit etre modifie pour faire du "load on * demand" pour que ceci fonctionne * * autrement dit, il faut pouvoir faire des load() un peu * n'importe quand */ if (isset($vars['nid'])) { $this->load($vars['nid']); } if (isset($vars['text'])) { $this->set('text', $vars['text']); } else { return "no text set"; }} function print_block() { return "Nouvelle! (# " .$this->get('nid') . "<br>" . $this->get('text'); }} ?>Next | ||
Insertion d'un webbug "phpOpenTracker" |
Documentation generated on Tue, 11 Jan 2005 01:38:16 -0500 by phpDocumentor 1.3.0RC3