<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://dotclear.watch/feed/rss2/xslt" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>DotclearWatch / Blog - Mot-clé - structure</title>
    <link>https://dotclear.watch/</link>
    <atom:link href="https://dotclear.watch/feed/tag/structure/rss2" rel="self" type="application/rss+xml" />
    <description>Suivez l'évolution du moteur de blogs Dotclear.</description>
    <language>fr</language>
    <pubDate>Mon, 11 May 2026 06:10:31 +0200</pubDate>
    <copyright>Tous droits réservés © Jean-Christian Denis</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Dotclear</generator>
          <item>
        <title>Fichier Install d'un module</title>
        <link>https://dotclear.watch/Billet/Fichier-Install-d-un-module</link>
        <guid isPermaLink="false">urn:md5:374cf218364b206c7b7fe9a6bba42317</guid>
        <pubDate>Sun, 16 Jul 2023 20:51:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.27</category>
                          <category>2.27</category>
                  <category>admin</category>
                  <category>install</category>
                  <category>module</category>
                  <category>plugin</category>
                  <category>structure</category>
                  <category>theme</category>
                  <category>update</category>
                <description>&lt;p&gt;Le fichier &lt;strong&gt;Install.php&lt;/strong&gt;, placé dans &lt;a href=&quot;https://dotclear.watch/Billet/Structure-d-un-module&quot;&gt;le dossier src&lt;/a&gt; du module, permet d'effectuer ses opérations d'installation et de mise à jour.&lt;/p&gt; &lt;p&gt;Le fichier &lt;strong&gt;Install.php&lt;/strong&gt; fait partie du processus reconnu par le gestionnaire de modules, il est donc automatiquement pris en compte coté admin si il existe.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il est placé dans le sous dossier &lt;code&gt;src&lt;/code&gt; du module,&lt;/li&gt;
&lt;li&gt;Il contient une classe du nom de &lt;code&gt;Install&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Il est dans l'espace de nom PHP &lt;code&gt;Dotclear\Plugin\monPlugin&lt;/code&gt; ou &lt;code&gt;Dotclear\Theme\monTheme&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;La classe doit étendre &lt;a href=&quot;https://dotclear.watch/Billet/La-class-Process&quot;&gt;la classe Process&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Seules les méthodes &lt;code&gt;init()&lt;/code&gt; et &lt;code&gt;process()&lt;/code&gt; sont utilisées,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;br /&gt;
La méthode &lt;code&gt;init()&lt;/code&gt; de la classe &lt;strong&gt;doit&lt;/strong&gt; vérifier que la version installée n'existe pas ou qu'elle est à mettre à jour, elle doit renvoyer &lt;code&gt;false&lt;/code&gt; si il n'y a pas besoin d'effectuer ces opérations d'installation / mise à jour. Pour aider, &lt;a href=&quot;https://dotclear.watch/Billet/Les-classes-de-module-My&quot;&gt;la classe My&lt;/a&gt; embarque un contexte qui permet cela &lt;code&gt;My::checkContext(My::INSTALL)&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Exemple du plugin blogroll de la distribution qui ajoute une table à la base de données :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?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()-&amp;gt;con, dcCore::app()-&amp;gt;prefix);

        $schema-&amp;gt;{initBlogroll::LINK_TABLE_NAME}
            -&amp;gt;link_id(&amp;#039;bigint&amp;#039;, 0, false)
            -&amp;gt;blog_id(&amp;#039;varchar&amp;#039;, 32, false)
            -&amp;gt;link_href(&amp;#039;varchar&amp;#039;, 255, false)
            -&amp;gt;link_title(&amp;#039;varchar&amp;#039;, 255, false)
            -&amp;gt;link_desc(&amp;#039;varchar&amp;#039;, 255, true)
            -&amp;gt;link_lang(&amp;#039;varchar&amp;#039;, 5, true)
            -&amp;gt;link_xfn(&amp;#039;varchar&amp;#039;, 255, true)
            -&amp;gt;link_position(&amp;#039;integer&amp;#039;, 0, false, 0)

            -&amp;gt;primary(&amp;#039;pk_link&amp;#039;, &amp;#039;link_id&amp;#039;)
            -&amp;gt;index(&amp;#039;idx_link_blog_id&amp;#039;, &amp;#039;btree&amp;#039;, &amp;#039;blog_id&amp;#039;)
            -&amp;gt;reference(&amp;#039;fk_link_blog&amp;#039;, &amp;#039;blog_id&amp;#039;, &amp;#039;blog&amp;#039;, &amp;#039;blog_id&amp;#039;, &amp;#039;cascade&amp;#039;, &amp;#039;cascade&amp;#039;)
        ;

        (new Structure(dcCore::app()-&amp;gt;con, dcCore::app()-&amp;gt;prefix))-&amp;gt;synchronize($schema);

        return true;
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;em&gt;&lt;q&gt;Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Fichier Config d'un module</title>
        <link>https://dotclear.watch/Billet/Fichier-Config-d-un-module</link>
        <guid isPermaLink="false">urn:md5:996cf791be01db13a047003087fe99f3</guid>
        <pubDate>Sun, 16 Jul 2023 14:03:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.27</category>
                          <category>2.27</category>
                  <category>admin</category>
                  <category>backend</category>
                  <category>config</category>
                  <category>module</category>
                  <category>plugin</category>
                  <category>structure</category>
                  <category>theme</category>
                <description>&lt;p&gt;Le fichier &lt;strong&gt;Config.php&lt;/strong&gt;, placé dans &lt;a href=&quot;https://dotclear.watch/Billet/Structure-d-un-module&quot;&gt;le dossier src&lt;/a&gt; du module, simplifie la gestion de sa configuration.&lt;/p&gt; &lt;p&gt;Le fichier &lt;strong&gt;Config.php&lt;/strong&gt; fait partie du processus reconnu par le gestionnaire de modules, il est donc automatiquement pris en compte dans l'administration si il existe.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il est placé dans le sous dossier &lt;code&gt;src&lt;/code&gt; du module,&lt;/li&gt;
&lt;li&gt;Il contient une classe du nom de &lt;code&gt;Config&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Il est dans l'espace de nom PHP &lt;code&gt;Dotclear\Plugin\monPlugin&lt;/code&gt; ou &lt;code&gt;Dotclear\Theme\monTheme&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;La classe doit étendre &lt;a href=&quot;https://dotclear.watch/Billet/La-class-Process&quot;&gt;la classe Process&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Les 3 méthodes &lt;code&gt;init()&lt;/code&gt; et &lt;code&gt;process()&lt;/code&gt; et &lt;code&gt;render()&lt;/code&gt; sont utilisées,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cette classe simplifie la gestion de la configuration d'un module dans le sens où la partie construction de la page est déjà effectuée par le gestionnaire de modules. Seul le traitement des valeurs et le contenu du formulaire sont à la charge de la classe Config. Un lien vers cette page sera ajouté à la liste de plugins ou sur les thèmes de la page de gestion d'apparence du blog. Un lien sera également ajouté en bas de page principale de gestion du plugin si elle existe.&lt;br /&gt;
&lt;br /&gt;
Exemple complet du fichier config du thème customCSS de la distribution :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
namespace Dotclear\Theme\customCSS;

use dcCore;
use Dotclear\Core\Backend\Notices;
use Dotclear\Core\Process;
use Dotclear\Helper\File\Path;
use Dotclear\Helper\Html\Html;
use Dotclear\Helper\L10n;
use Exception;
use form;

class Config extends Process
{
    public static function init(): bool
    {
        if (My::checkContext(My::CONFIG)) {
            My::l10n(&amp;#039;main&amp;#039;);
            dcCore::app()-&amp;gt;admin-&amp;gt;css_file = Path::real(dcCore::app()-&amp;gt;blog-&amp;gt;public_path) . &amp;#039;/custom_style.css&amp;#039;;

            if (!is_file(dcCore::app()-&amp;gt;admin-&amp;gt;css_file) &amp;amp;&amp;amp; !is_writable(dirname(dcCore::app()-&amp;gt;admin-&amp;gt;css_file))) {
                throw new Exception(
                    sprintf(
                        __(&amp;#039;File %s does not exist and directory %s is not writable.&amp;#039;),
                        dcCore::app()-&amp;gt;admin-&amp;gt;css_file,
                        dirname(dcCore::app()-&amp;gt;admin-&amp;gt;css_file)
                    )
                );
            }
            self::status(true);
        }

        return self::status();
    }

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

        if (isset($_POST[&amp;#039;css&amp;#039;])) {
            @$fp = fopen(dcCore::app()-&amp;gt;admin-&amp;gt;css_file, &amp;#039;wb&amp;#039;);
            fwrite($fp, $_POST[&amp;#039;css&amp;#039;]);
            fclose($fp);

            Notices::message(__(&amp;#039;Style sheet upgraded.&amp;#039;), true, true);
        }

        return true;
    }

    public static function render(): void
    {
        if (!self::status()) {
            return;
        }

        $css_content = is_file(dcCore::app()-&amp;gt;admin-&amp;gt;css_file) ? file_get_contents(dcCore::app()-&amp;gt;admin-&amp;gt;css_file) : &amp;#039;&amp;#039;;

        echo
        &amp;#039;&amp;lt;p class=&amp;quot;area&amp;quot;&amp;gt;&amp;lt;label&amp;gt;&amp;#039; . __(&amp;#039;Style sheet:&amp;#039;) . &amp;#039;&amp;lt;/label&amp;gt; &amp;#039; .
        form::textarea(&amp;#039;css&amp;#039;, 60, 20, Html::escapeHTML($css_content)) . &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;em&gt;&lt;q&gt;Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Fichier Frontend d'un module</title>
        <link>https://dotclear.watch/Billet/Fichier-Frontend-d-un-module</link>
        <guid isPermaLink="false">urn:md5:bc70744ae6bb3074af21de368e3b26fd</guid>
        <pubDate>Sun, 16 Jul 2023 13:48:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.27</category>
                          <category>2.27</category>
                  <category>frontend</category>
                  <category>module</category>
                  <category>plugin</category>
                  <category>public</category>
                  <category>structure</category>
                  <category>theme</category>
                <description>&lt;p&gt;Le fichier &lt;strong&gt;Frontend.php&lt;/strong&gt;, placé dans &lt;a href=&quot;https://dotclear.watch/Billet/Structure-d-un-module&quot;&gt;le dossier src&lt;/a&gt; du module, permet de préparer le nécessaire à son fonctionnement en partie public.&lt;/p&gt; &lt;p&gt;Le fichier &lt;strong&gt;Frontend.php&lt;/strong&gt; fait partie du processus reconnu par le gestionnaire de modules, il est donc automatiquement pris en compte coté public si il existe.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il est placé dans le sous dossier &lt;code&gt;src&lt;/code&gt; du module,&lt;/li&gt;
&lt;li&gt;Il contient une classe du nom de &lt;code&gt;Frontend&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Il est dans l'espace de nom PHP &lt;code&gt;Dotclear\Plugin\monPlugin&lt;/code&gt; ou &lt;code&gt;Dotclear\Theme\monTheme&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;La classe doit étendre &lt;a href=&quot;https://dotclear.watch/Billet/La-class-Process&quot;&gt;la classe Process&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Seules les méthodes &lt;code&gt;init()&lt;/code&gt; et &lt;code&gt;process()&lt;/code&gt; sont utilisées,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Généralement cette classe est utilisée pour préparer des variables nécessaires au fonctionnement du module, déclarer ses templates, ajouter ses behaviors, pour la partie publique des blogs.&lt;br /&gt;
&lt;br /&gt;
Exemple du fichier Frontend.php du plugin &lt;strong&gt;blogroll&lt;/strong&gt; de la distribution :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
declare(strict_types=1);

namespace Dotclear\Plugin\blogroll;

use dcCore;
use Dotclear\Core\Process;

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

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

        dcCore::app()-&amp;gt;tpl-&amp;gt;addValue(&amp;#039;Blogroll&amp;#039;, [FrontendTemplate::class, &amp;#039;blogroll&amp;#039;]);
        dcCore::app()-&amp;gt;tpl-&amp;gt;addValue(&amp;#039;BlogrollXbelLink&amp;#039;, [FrontendTemplate::class, &amp;#039;blogrollXbelLink&amp;#039;]);

        dcCore::app()-&amp;gt;addBehaviors([
            &amp;#039;initWidgets&amp;#039;        =&amp;gt; [Widgets::class, &amp;#039;initWidgets&amp;#039;],
            &amp;#039;initDefaultWidgets&amp;#039; =&amp;gt; [Widgets::class, &amp;#039;initDefaultWidgets&amp;#039;],
        ]);

        return true;
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;em&gt;&lt;q&gt;Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Fichier Backend d'un module</title>
        <link>https://dotclear.watch/Billet/Fichier-Backend-d-un-module</link>
        <guid isPermaLink="false">urn:md5:fa3c0167756c3590593aa2a46afc6459</guid>
        <pubDate>Sun, 16 Jul 2023 13:36:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.27</category>
                          <category>2.27</category>
                  <category>admin</category>
                  <category>backend</category>
                  <category>module</category>
                  <category>plugin</category>
                  <category>structure</category>
                  <category>theme</category>
                <description>&lt;p&gt;Le fichier &lt;strong&gt;Backend.php&lt;/strong&gt;, placé dans &lt;a href=&quot;https://dotclear.watch/Billet/Structure-d-un-module&quot;&gt;le dossier src&lt;/a&gt; du module, permet de préparer le nécessaire à son fonctionnement pour sa partie administration.&lt;/p&gt; &lt;p&gt;Le fichier &lt;strong&gt;Backend.php&lt;/strong&gt; fait partie du processus reconnu par le gestionnaire de modules, il est donc automatiquement pris en compte dans l'administration si il existe.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il est placé dans le sous dossier &lt;code&gt;src&lt;/code&gt; du module,&lt;/li&gt;
&lt;li&gt;Il contient une classe du nom de &lt;code&gt;Backend&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Il est dans l'espace de nom PHP &lt;code&gt;Dotclear\Plugin\monPlugin&lt;/code&gt; ou &lt;code&gt;Dotclear\Theme\monTheme&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;La classe doit étendre &lt;a href=&quot;https://dotclear.watch/Billet/La-class-Process&quot;&gt;la classe Process&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Seules les méthodes &lt;code&gt;init()&lt;/code&gt; et &lt;code&gt;process()&lt;/code&gt; sont utilisées,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Généralement cette classe est utilisée pour préparer des variables nécessaires au fonctionnement du module, ajouter ses menus, favoris, behaviors, pour la partie administration des blogs.&lt;br /&gt;
&lt;br /&gt;
Exemple du fichier Backend.php du plugin &lt;strong&gt;aboutConfig&lt;/strong&gt; de la distribution :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
declare(strict_types=1);

namespace Dotclear\Plugin\aboutConfig;

use Dotclear\Core\Backend\Menus;
use Dotclear\Core\Process;

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

    public static function process(): bool
    {
        if (self::status()) {
            My::addBackendMenuItem(Menus::MENU_SYSTEM);
        }

        return self::status();
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;em&gt;&lt;q&gt;Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Fichier Prepend d'un module</title>
        <link>https://dotclear.watch/Billet/Fichier-Prepend-d-un-module</link>
        <guid isPermaLink="false">urn:md5:35e77dec2b2fe2b2ee0241ae66d0a41c</guid>
        <pubDate>Sun, 16 Jul 2023 10:38:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.27</category>
                          <category>2.27</category>
                  <category>admin</category>
                  <category>module</category>
                  <category>plugin</category>
                  <category>prepend</category>
                  <category>public</category>
                  <category>structure</category>
                  <category>theme</category>
                <description>&lt;p&gt;Le fichier &lt;strong&gt;Prepend.php&lt;/strong&gt;, placé dans &lt;a href=&quot;https://dotclear.watch/Billet/Structure-d-un-module&quot;&gt;le dossier src&lt;/a&gt; du module, permet de préparer le nécessaire à son fonctionnement.&lt;/p&gt; &lt;p&gt;Le fichier &lt;strong&gt;Prepend.php&lt;/strong&gt; fait partie du processus reconnu par le gestionnaire de modules, il est donc automatiquement pris en compte si il existe.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Il est placé dans le sous dossier &lt;code&gt;src&lt;/code&gt; du module,&lt;/li&gt;
&lt;li&gt;Il contient une classe du nom de &lt;code&gt;Prepend&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;Il est dans l'espace de nom PHP &lt;code&gt;Dotclear\Plugin\monPlugin&lt;/code&gt; ou &lt;code&gt;Dotclear\Theme\monTheme&lt;/code&gt;,,&lt;/li&gt;
&lt;li&gt;La classe doit étendre &lt;a href=&quot;https://dotclear.watch/Billet/La-class-Process&quot;&gt;la classe Process&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Seuls les méthodes &lt;code&gt;init()&lt;/code&gt; et &lt;code&gt;process()&lt;/code&gt; sont utilisées,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Généralement cette classe est utilisée pour préparer des variables nécessaires au fonctionnement global du module ou pour ajouter des behaviors, à la fois coté admin &lt;strong&gt;et&lt;/strong&gt; coté public. Si ces définitions sont propres à l'admin ou au public, il faut utiliser les fichiers Backend.php ou Frontend.php.&lt;br /&gt;
&lt;br /&gt;
Exemple du fichier Prepend.php du plugin &lt;strong&gt;blogroll&lt;/strong&gt; de la distribution :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
declare(strict_types=1);

namespace Dotclear\Plugin\blogroll;

use dcCore;
use Dotclear\Core\Process;

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

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

        dcCore::app()-&amp;gt;url-&amp;gt;register(&amp;#039;xbel&amp;#039;, &amp;#039;xbel&amp;#039;, &amp;#039;^xbel(?:\/?)$&amp;#039;, [FrontendUrl::class, &amp;#039;xbel&amp;#039;]);

        return true;
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;em&gt;&lt;q&gt;Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Structure d'un module</title>
        <link>https://dotclear.watch/Billet/Structure-d-un-module</link>
        <guid isPermaLink="false">urn:md5:6d0c1344a22a365bd1abddfe6de79f06</guid>
        <pubDate>Tue, 11 Jul 2023 21:09:00 +0100</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.27</category>
                          <category>2.27</category>
                  <category>module</category>
                  <category>plugin</category>
                  <category>structure</category>
                  <category>theme</category>
                <description>&lt;p&gt;Avec la &lt;a href=&quot;https://dotclear.watch/Billet/Release-2.27&quot;&gt;version 2.27&lt;/a&gt; de Dotclear la structure de plugins et thèmes devient plus rigide. Cette structure deviendra obligatoire assez rapidement.&lt;/p&gt; &lt;p&gt;La structure générale d'un module est quasi commune aux plugins et aux thèmes. Elle se définit comme suit.&lt;br /&gt;&lt;/p&gt;

&lt;h5&gt;Nom&lt;/h5&gt;

&lt;p&gt;Depuis la mise en place des espaces de nom pour les modules, le nom du répertoire racine du module sera son ID et son espace de nom PHP. De ce fait il est proscrit tous caractères autres que des chiffres et lettres et le nom doit commencer par une lettre.&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Invalide&lt;/strong&gt; : mon-plugin, 1to3plugin,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Valide :&lt;/strong&gt; monplugin, MonPlugin2,&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Fichiers à la racine du module :&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-de-d%C3%A9finition-d-un-module&quot;&gt;_define.php&lt;/a&gt; : Fichier de définition&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-de-d%C3%A9sactivation-d-un-module&quot;&gt;_disabled&lt;/a&gt; : Fichier de désactivation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-init-d-un-module&quot;&gt;_init.php&lt;/a&gt; : Fichier de définition d'initialisation&lt;/li&gt;
&lt;li&gt;CHANGELOG.md : récapitulatif des modifications/versions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-de-d%C3%A9p%C3%B4t-tiers&quot;&gt;dcstore.xml&lt;/a&gt; : Fichier de définition de dépôt distant&lt;/li&gt;
&lt;li&gt;icon.svg : Icône&lt;/li&gt;
&lt;li&gt;icon-dark.svg : Icône sombre&lt;/li&gt;
&lt;li&gt;LICENSE : Licence&lt;/li&gt;
&lt;li&gt;README.md : Document d'introduction&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Répertoires à la racine du module :&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;css : Feuilles de styles&lt;/li&gt;
&lt;li&gt;default-templates : Templates&lt;/li&gt;
&lt;li&gt;img : Images&lt;/li&gt;
&lt;li&gt;js : Scripts javascript&lt;/li&gt;
&lt;li&gt;locales : Traductions&lt;/li&gt;
&lt;li&gt;src : Espace de nom contenant tous les fichiers .php&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Fichiers du dossier src :&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-Backend-d-un-module&quot;&gt;Backend.php&lt;/a&gt; : ex _admin.php Préparation de la partie admin,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-Config-d-un-module&quot;&gt;Config.php&lt;/a&gt; : ex _config.php Configurateur,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-Frontend-d-un-module&quot;&gt;Frontend.php&lt;/a&gt; : ex _public.php Préparation de la partie publique&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-Install-d-un-module&quot;&gt;Install.php&lt;/a&gt; : ex _install.php Processus d'installation&lt;/li&gt;
&lt;li&gt;Manage.php : ex index.php Page de gestion principale&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Les-classes-de-module-My&quot;&gt;My.php&lt;/a&gt; : fonctions prédéfinies d'aides au code&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotclear.watch/Billet/Fichier-Prepend-d-un-module&quot;&gt;Prepend.php&lt;/a&gt; : ex _prepend.php Préparation générale&lt;/li&gt;
&lt;li&gt;Widgets.php : ex _widgets.php Gestion des widgets par le plugin widgets&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;Bonnes pratiques&lt;/h5&gt;

&lt;p&gt;Il est vivement recommandé (possible obligation à l'avenir) d'utiliser l'&lt;strong&gt;ID du module&lt;/strong&gt; pour l'identifiant de ses paramètres dans les espaces de paramètres (blog settings) et les espaces de préférences (user pref).&lt;br /&gt;
Il est recommandé de séparer les behaviors trop volumineux des fichiers &lt;strong&gt;Backend.php&lt;/strong&gt; / &lt;strong&gt;Frontend.php&lt;/strong&gt; et de les mettre dans un fichier &lt;code&gt;BackendBehaviors.php&lt;/code&gt; / &lt;code&gt;FrontendBehaviors.php&lt;/code&gt;.&lt;br /&gt;
De manière générale le nom de fichier et donc de classe doit être en rapport avec sa fonction, par exemple une classe contenant toutes les méthodes en rapport aux &lt;strong&gt;templates coté public&lt;/strong&gt; sera nommé &lt;code&gt;FrontendTemplate&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Ce document est en cours d'écriture, il est incomplet.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;q&gt;Le contenu de ce document a été écrit suivant le code de la version 2.27 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
