====== Création d'une page sur le blog ====== Après avoir découvert comment [[.:tutorial#premier-plugin|créer un plugin]], voyons comment créer une page //interactive// sur un blog. Nous allons créer un plugin ''Public example'' en plaçant les fichiers suivants dans un répertoire appelé ''/publicExample/''. ===== Le fichier _define.php ===== registerModule( 'Public example', // Name 'A public page', // Description 'Dotclear Documentation', // Author '0.1', // Version array( // Properties 'permissions' => 'usage,contentadmin', 'type' => 'plugin' ) ); ?> Outre le premier test, il est fortement recommandé de le mettre aucun autre code que la ligne d'enregistrement du module dans ce fichier, et de n'y mettre que des chaînes de caractères statiques en guise de paramètres. En effet, ce fichier peut être amené à être lu par des scripts php (console dotaddict notamment), qui pourraient refuser le plugin si d'autres expressions y étaient trouvées. ===== Le fichier _prepend.php ===== On enregistre l'URL dans le fichier ''_prepend.php'' : url->register('publicexample','publicexample', '^publicexample(?:/(.+))?$',array('publicExampleDocument','page')); ?> Paramètres de la fonction register : - le type d'URL, utilisé par Dotclear pour l'identifier - l'URL de base de la page - l'expression régulière de l'URL de la page - un //callback//, un nom de fonction ou un tableau avec le nom d'une classe et d'une fonction à appeler lorsque cette URL est demandée Pour accéder à cette URL, quel que soit le contexte, on utilise ce code : $core->blog->url.$core->url->getBase('publicexample') ''publicexample'' est l'identifiant de l'URL. ===== Le fichier _public.php ===== ==== Création de la page ==== L'URL "publicexample" que l'on a enregistrée dans le fichier ''_prepend.php'' appelle la fonction ''page()'' de la classe ''publicExampleDocument''. Cette fonction reçoit un paramètre, il correspond à l'expression régulière de l'URL de la page, ici ''^publicexample(?:/(.+))?'' sélectionne le texte après ''publicexample/'' s'il existe. Le plugin affichera un message différent si on demande l'URL "publicexample/hello". class publicExampleDocument extends dcUrlHandlers { public static function page($args) { global $core; # $_ctx est le contexte, on y insère ce que l'on veut $_ctx =& $GLOBALS['_ctx']; # $_ctx->publicExample sera une chaîne de caractères # si l'URL est "publicexample/lorem" if ($args == 'lorem') { $_ctx->publicExample = __('Lorem ipsum'); } # sinon, si l'URL est "publicexample" else { $_ctx->publicExample = __('Public'); } # enregistrer le répertoire qui contient le fichier template par défaut, # le fichier public_example.html $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'); self::serveDocument('public_example.html','text/html'); } } La variable ''$_ctx->publicExample'' est définie en fonction de la valeur de ''$args'', elle sera utilisée plus tard. ==== Déclaration de la balise ==== Voir la [[..:tpl|page spécifique]] pour plus d'informations. # déclarer la balise {{tpl:Public}} $core->tpl->addValue('PublicExampleValue', array('publicExampleTpl','PublicExampleValue')); class publicExampleTpl { public static function PublicExampleValue() { return('publicExample); ?>'); } } ==== Le fichier _public.php complet ==== publicExample sera une chaîne de caractères # si l'URL est "publicexample/lorem" if ($args == 'lorem') { $_ctx->publicExample = __('Lorem ipsum'); } # sinon, si l'URL est "publicexample" else { $_ctx->publicExample = __('Public'); } # enregistrer le répertoire qui contient le fichier template par défaut, # le fichier public_example.html $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'); self::serveDocument('public_example.html','text/html'); } } # déclarer la balise {{tpl:PublicExampleValue}} $core->tpl->addValue('PublicExampleValue', array('publicExampleTpl','PublicExampleValue')); class publicExampleTpl { public static function PublicExampleValue() { return('publicExample); ?>'); } } ?> ===== Le fichier de template ===== Situé dans le répertoire ''default-templates'', le fichier de template est appelé public_page.html et il contient ceci : {{tpl:lang Public example}} - {{tpl:BlogName encode_html="1"}} {{tpl:include src="_head.html"}}
{{tpl:include src="_top.html"}}

{{tpl:lang Public example}}

{{tpl:include src="_footer.html"}}
Il utilise la balise {{tpl:PublicExampleValue}} déclarée dans le fichier _public.php. ===== Télécharger ce plugin exemple ===== [[http://lab.dotclear.org/raw-attachment/wiki/plugin/publicExample/plugin-publicExample.zip|plugin-publicExample.zip]]