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:PublicExampleValue}}
{{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]]