La class Process

Billet

La classe Process introduite dans les dernières versions de Dotclear devient la norme et est requise quasi partout depuis Dotclear 2.27.

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