====== 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( /* Name */ 'Public example', /* Description */ 'A public page', /* Author */ 'Dotclear Documentation', /* Version */ '0.1', /* Properties */ array( /* Permissions */ 'permissions' => 'usage,contentadmin', /* Configuration */ 'standalone_config' => false, /* Type */ 'type' => 'plugin' ) ); ?> ===== 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]]