La plupart des classes de plugins et thèmes doivent étendre la classe Process, pour cela il suffit de déclarer son utilisation en début de fichier puis d'étendre votre classe.
<?php
use Dotclear\Core\Process;
class Manage extends Process
{
}
Cette classe est pour l'instant très succincte mais permet de découper le déroulement du script en trois parties.
Première partie
Elle utilise la méthode Process::init()
elle permet de vérifier les droits à utiliser votre classe. Elle utilise un mécanisme mémorisant le statut de cette initialisation, verrouillant ou non l'utilisation des méthodes suivantes.
public static function init(): bool
{
// On enregistre la permissions d'utiliser la classe et on renvoie le résultat
return self::status(My::checkContext(My::MANAGE));
}
On voit ici l'utilisation de la classe My qui est un outil d'aide à l'écriture des modules simplifiant l'utilisation de certains mécanismes.
Seconde partie
Elle utilise la méthode Process::process()
qui est consacrée à la préparation et au traitement des données, telles que celles des formulaires par exemple.
public static function process(): bool
{
// On vérifie le droit d'effectuer cette partie
if (!self::status()) {
return false;
}
if (!empty($_POST['id'])) {
// traitement de mon formulaire
// On a réussi, on ajoute un message
Notices::addSuccessNotice(__('Victory'));
// On redirige vers la page du plugin
dcCore::->admin->url->redirect('admin.plugin.' . My::id());
}
// Cette méthode doit retourner true si on veut exécuter la troisième partie
return true;
}
La troisième partie
Elle utilise la méthode Process::render()
qui est consacré au rendu. C'est à dire à l'affichage dans le navigateur.
public static function render(): void
{
// On vérifie le droit d'effectuer cette partie
if (!self::status()) {
return;
}
// On prépare l'affichage du haut de page
Page::openModule(My::name());
// On ajoute le menu façon Dotclear
echo
Page::breadcrumb(
[
__('Plugin') => '',
My::name() => '',
]
) .
// On affiche d'éventuelle messages
Notices::getNotices();
// On ajoute le contenu de la page
echo __('yeah!');
// On ajoute l'aide de la page
Page::helpBlock(My::id());
// On ferme la page
Page::closeModule();
}
Ici on voit l'utilisation des classes d'outils My et Page qui vont grandement faciliter l'écriture des plugins et thèmes.
A noter que seule la première méthode init() est obligatoire. Si elle renvoie true, c'est que la classe ne contient pas de méthode process(), la méthode render() sera exécuté.
Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.
La discussion continue ailleurs
URL de rétrolien : https://dotclear.watch/trackback/6