Après avoir découvert comment 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/
.
<?php if (!defined('DC_RC_PATH')) {return;} $this->registerModule( 'Public example', // Name 'A public page', // Description 'Dotclear Documentation', // Author '0.1', // Version array( // Properties 'permissions' => 'usage,contentadmin', 'type' => 'plugin' ) ); ?>
Note :
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.
On enregistre l'URL dans le fichier _prepend.php
:
<?php if (!defined('DC_RC_PATH')) {return;} global $core; # enregistrer l'URL "publicexample" $core->url->register('publicexample','publicexample', '^publicexample(?:/(.+))?$',array('publicExampleDocument','page')); ?>
Paramètres de la fonction register :
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.
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.
Voir la 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('<?php echo($_ctx->publicExample); ?>'); } }
<?php # ***** BEGIN LICENSE BLOCK ***** # # This program is free software. It comes without any warranty, to # the extent permitted by applicable law. You can redistribute it # and/or modify it under the terms of the Do What The Fuck You Want # To Public License, Version 2, as published by Sam Hocevar. See # http://sam.zoy.org/wtfpl/COPYING for more details. # # ***** END LICENSE BLOCK ***** if (!defined('DC_RC_PATH')) {return;} global $core; 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'); } } # déclarer la balise {{tpl:PublicExampleValue}} $core->tpl->addValue('PublicExampleValue', array('publicExampleTpl','PublicExampleValue')); class publicExampleTpl { public static function PublicExampleValue() { return('<?php echo($_ctx->publicExample); ?>'); } } ?>
Situé dans le répertoire default-templates
, le fichier de template est appelé public_page.html et il contient ceci :
<!DOCTYPE html> <html lang="{{tpl:BlogLanguage}}"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>{{tpl:lang Public example}} - {{tpl:BlogName encode_html="1"}}</title> {{tpl:include src="_head.html"}} </head> <body class="dc-publicExample"> <div id="page"> {{tpl:include src="_top.html"}} <div id="wrapper"> <div id="main"> <div id="content"> <div id="content-info"> <h2>{{tpl:lang Public example}}</h2> </div> <div class="content-inner"> <h3>{{tpl:PublicExampleValue}}</h3> <ul> <li><a href="{{tpl:BlogURL}}publicexample">{{tpl:lang publicexample}}</a></li> <li><a href="{{tpl:BlogURL}}publicexample/lorem"> {{tpl:lang publicexample/lorem}}</a></li> </ul> </div> </div> </div> <!-- End #main --> <div id="sidebar"> <div id="blognav"> {{tpl:Widgets type="nav"}} </div> <!-- End #blognav --> <div id="blogextra"> {{tpl:Widgets type="extra"}} </div> <!-- End #blogextra --> </div> </div> <!-- End #wrapper --> {{tpl:include src="_footer.html"}} </div> <!-- End #page --> </body> </html>
Il utilise la balise
{{tpl:PublicExampleValue}}
déclarée dans le fichier _public.php.
Wiki powered by Dokuwiki.