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
ouDotclear\Theme\monTheme
, - La classe doit étendre la classe Process,
- Seules les méthodes
init()
etprocess()
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