Fichier Install d'un module

Billet

Le fichier Install.php, placé dans le dossier src du module, permet d'effectuer ses opérations d'installation et de mise à jour.

Le fichier Install.php fait partie du processus reconnu par le gestionnaire de modules, il est donc automatiquement pris en compte coté admin si il existe.

  • Il est placé dans le sous dossier src du module,
  • Il contient une classe du nom de Install,
  • Il est dans l'espace de nom PHP Dotclear\Plugin\monPlugin ou Dotclear\Theme\monTheme,
  • La classe doit étendre la classe Process,
  • Seules les méthodes init() et process() sont utilisées,

Ce fichier est chargé en préambule de la page d'accueil de l'admin, de la page de gestion de l'apparence du blog, et de la page de gestion des plugins. Généralement il permet d'enregistrer des paramètres, de créer des tables, etc.
La méthode init() de la classe doit vérifier que la version installée n'existe pas ou qu'elle est à mettre à jour, elle doit renvoyer false si il n'y a pas besoin d'effectuer ces opérations d'installation / mise à jour. Pour aider, la classe My embarque un contexte qui permet cela My::checkContext(My::INSTALL).

Exemple du plugin blogroll de la distribution qui ajoute une table à la base de données :

<?php
declare(strict_types=1);

namespace Dotclear\Plugin\blogroll;

use dcCore;
use Dotclear\Core\Process;
use Dotclear\Database\Structure;
use initBlogroll;

class Install extends Process
{
    public static function init(): bool
    {
        return self::status(My::checkContext(My::INSTALL));
    }

    public static function process(): bool
    {
        if (!self::status()) {
            return false;
        }

        $schema = new Structure(dcCore::app()->con, dcCore::app()->prefix);

        $schema->{initBlogroll::LINK_TABLE_NAME}
            ->link_id('bigint', 0, false)
            ->blog_id('varchar', 32, false)
            ->link_href('varchar', 255, false)
            ->link_title('varchar', 255, false)
            ->link_desc('varchar', 255, true)
            ->link_lang('varchar', 5, true)
            ->link_xfn('varchar', 255, true)
            ->link_position('integer', 0, false, 0)

            ->primary('pk_link', 'link_id')
            ->index('idx_link_blog_id', 'btree', 'blog_id')
            ->reference('fk_link_blog', 'blog_id', 'blog', 'blog_id', 'cascade', 'cascade')
        ;

        (new Structure(dcCore::app()->con, dcCore::app()->prefix))->synchronize($schema);

        return true;
    }
}


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/28