<?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é - config</title>
    <link>https://dotclear.watch/</link>
    <atom:link href="https://dotclear.watch/feed/tag/config/rss2" rel="self" type="application/rss+xml" />
    <description>Suivez l'évolution du moteur de blogs Dotclear.</description>
    <language>fr</language>
    <pubDate>Thu, 30 Apr 2026 05:42:22 +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>Configuration de l'application</title>
        <link>https://dotclear.watch/Billet/Configuration-de-l-application-en-2.28</link>
        <guid isPermaLink="false">urn:md5:27df6568bc908f79b480552f7e11d2c5</guid>
        <pubDate>Fri, 13 Oct 2023 08:00:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>2.28</category>
                          <category>2.28</category>
                  <category>config</category>
                <description>&lt;p&gt;La &lt;a href=&quot;https://dotclear.watch/Billet/Release-2.28&quot;&gt;version 2.28&lt;/a&gt; de Dotclear ajoute une nouvelle classe de visualisation de sa configuration..&lt;/p&gt; &lt;p&gt;Auparavant il fallait chercher les différentes ressources de configuration de Dotclear un peu partout, dans les fichier index, dans le fichier de config, dans des constantes, etc. Depuis la version 2.28, toutes ces informations sont accessibles depuis une seule classe et ses méthodes. Cette classe n'est pas modifiable, n'est pas remplaçable, aucune de ses propriétés n'est accessible. Elle va récupérer toutes les informations, notamment depuis le fichier config.php (qui ne change pas), les traiter et les proposer via ses méthodes avec un typage de retour strict et défini. Elle va également faire les premières vérifications de ces valeurs.&lt;br /&gt;
Il n'est plus utile de lire les constantes de Dotclear, toutes les constantes de la version 2.27 existent toujours mais ont leurs méthodes associées en 2.28 dans App::config(), de part ce fait ces valeurs existent toujours et ont un type fixe ce qui facilite leurs utilisations.&lt;/p&gt;

&lt;h5&gt;Liste des informations disponibles :&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;startTime(): float;&lt;/code&gt; &lt;del&gt;DC_START_TIME&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cliMode(): bool;&lt;/code&gt; &lt;del&gt;CLI_MODE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;debugMode(): bool;&lt;/code&gt; &lt;del&gt;DC_DEBUG&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;devMode(): bool;&lt;/code&gt; &lt;del&gt;DC_DEV&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;errorFile(): string;&lt;/code&gt; &lt;del&gt;DC_ERRORFILE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blogId(): string;&lt;/code&gt; &lt;del&gt;DC_BLOG_ID&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dotclearRoot(): string;&lt;/code&gt; &lt;del&gt;DC_ROOT&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dotclearVersion(): string;&lt;/code&gt; &lt;del&gt;DC_VERSION&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dotclearName(): string;&lt;/code&gt; &lt;del&gt;DC_NAME&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hasConfig(): bool;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;configPath(): string;&lt;/code&gt; &lt;del&gt;DC_RC_PATH&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;digestsRoot(): string;&lt;/code&gt; &lt;del&gt;DC_DIGESTS&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;l10nRoot(): string;&lt;/code&gt; &lt;del&gt;DC_L10N_ROOT&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;l10nUpdateUrl(): string;&lt;/code&gt; &lt;del&gt;DC_L10N_UPDATE_URL&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distributedPlugins(): string;&lt;/code&gt; &lt;del&gt;DC_DISTRIB_PLUGINS&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;distributedThemes(): string;&lt;/code&gt; &lt;del&gt;DC_DISTRIB_THEMES&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultTheme(): string;&lt;/code&gt; &lt;del&gt;DC_DEFAULT_THEME&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultTplset(): string;&lt;/code&gt; &lt;del&gt;DC_DEFAULT_TPLSET&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultJQuery(): string;&lt;/code&gt; &lt;del&gt;DC_DEFAULT_JQUERY&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minRequiredPhp(): string;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minRequiredMysql(): string;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minRequiredPgsql(): string;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nextRequiredPhp(): string;&lt;/code&gt; &lt;del&gt;DC_NEXT_REQUIRED_PHP&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vendorName(): string;&lt;/code&gt; &lt;del&gt;DC_VENDOR_NAME&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xmlrpcUrl(): string;&lt;/code&gt; &lt;del&gt;DC_XMLRPC_URL&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sessionTtl(): ?string;&lt;/code&gt; &lt;del&gt;DC_SESSION_TTL&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sessionName(): string;&lt;/code&gt; &lt;del&gt;DC_SESSION_NAME&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adminSsl(): bool;&lt;/code&gt; &lt;del&gt;DC_ADMIN_SSL&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adminUrl(): string;&lt;/code&gt; &lt;del&gt;DC_ADMIN_URL&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;adminMailfrom(): string;&lt;/code&gt; &lt;del&gt;DC_ADMIN_MAILFROM&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbDriver(): string;&lt;/code&gt; &lt;del&gt;DC_DBDRIVER&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbHost(): string;&lt;/code&gt; &lt;del&gt;DC_DBHOST&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbUser(): string;&lt;/code&gt; &lt;del&gt;DC_DBUSER&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbPassword(): string;&lt;/code&gt; &lt;del&gt;DC_DBPASSWORD&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbName(): string;&lt;/code&gt; &lt;del&gt;DC_DBNAME&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbPrefix(): string;&lt;/code&gt; &lt;del&gt;DC_DBPREFIX&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbPersist(): bool;&lt;/code&gt; &lt;del&gt;DC_DBPERSIST&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;masterKey(): string;&lt;/code&gt; &lt;del&gt;DC_MASTER_KEY&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cryptAlgo(): string;&lt;/code&gt; &lt;del&gt;DC_CRYPT_ALGO&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;coreUpdateUrl(): string;&lt;/code&gt; &lt;del&gt;DC_UPDATE_URL&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;coreUpdateCanal(): string;&lt;/code&gt; &lt;del&gt;DC_UPDATE_VERSION&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;coreNotUpdate(): bool;&lt;/code&gt; &lt;del&gt;DC_NOT_UPDATE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allowMultiModules(): bool;&lt;/code&gt; &lt;del&gt;DC_ALLOW_MULTI_MODULES&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;storeNotUpdate(): bool;&lt;/code&gt; &lt;del&gt;DC_STORE_NOT_UPDATE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allowRepositories(): bool;&lt;/code&gt; &lt;del&gt;DC_ALLOW_REPOSITORIES&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allowRestServices(): bool;&lt;/code&gt; &lt;del&gt;DC_REST_SERVICES&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cacheRoot(): string;&lt;/code&gt; &lt;del&gt;DC_TPL_CACHE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;varRoot(): string;&lt;/code&gt; &lt;del&gt;DC_VAR&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backupRoot(): string;&lt;/code&gt; &lt;del&gt;DC_BACKUP_PATH&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;coreUpgrade(): string;&lt;/code&gt; &lt;del&gt;DC_UPGRADE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pluginsRoot(): string;&lt;/code&gt; &lt;del&gt;DC_PLUGINS_ROOT&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxUploadSize(): int;&lt;/code&gt; &lt;del&gt;DC_MAX_UPLOAD_SIZE&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;queryTimeout(): int;&lt;/code&gt; &lt;del&gt;DC_QUERY_TIMEOUT&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;showHiddenDirs(): bool;&lt;/code&gt; &lt;del&gt;DC_SHOW_HIDDEN_DIRS&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;httpScheme443(): bool;&lt;/code&gt; &lt;del&gt;DC_FORCE_SCHEME_443&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;httpReverseProxy(): bool;&lt;/code&gt; &lt;del&gt;DC_REVERSE_PROXY&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;checkAddBlocker(): bool;&lt;/code&gt; &lt;del&gt;DC_ADBLOCKER_CHECK&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cspReportFile(): string;&lt;/code&gt; &lt;del&gt;DC_CSP_LOGFILE&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour en savoir plus sur la signification de ces méthodes, il est recommandé de lire le contenu du fichier &lt;strong&gt;src/Interface/ConfigInterface.php&lt;/strong&gt;. (&lt;a href=&quot;https://git.dotclear.org/dev/dotclear/src/branch/master/src/Interface/ConfigInterface.php&quot; hreflang=&quot;fr&quot; title=&quot;Fichier ConfigInterface sur Gitea&quot;&gt;Visible sur le dépôt git&lt;/a&gt;.)&lt;br /&gt;
Pour accéder à une de ces valeurs, il suffit de faire &lt;code&gt;App::config()-&amp;gt;cacheRoot();&lt;/code&gt;.&lt;br /&gt;&lt;/p&gt;

&lt;h5&gt;Attention&lt;/h5&gt;

&lt;p&gt;Là où souvent il fallait tester la présence d'une valeur, par exemple :&lt;br /&gt;
&lt;code&gt;if (defined('DC_DEFAULT_TPLSET')) { $tpl = DC_DEFAULT_TPLSET; }&lt;/code&gt;&lt;br /&gt;
Désormais cette valeur existe toujours, on peut éventuellement tester si elle est vide :&lt;br /&gt;
&lt;code&gt;if (!empty(App::config()-&amp;gt;defaultTplset())) { }&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;</description>
        
              </item>
          <item>
        <title>Les modes DEBUG et DEV</title>
        <link>https://dotclear.watch/Billet/Les-modes-DC_DEBUG-et-DC_DEV</link>
        <guid isPermaLink="false">urn:md5:e31daf22be29d5b3e74c450b61614390</guid>
        <pubDate>Thu, 05 Oct 2023 23:42:00 +0200</pubDate>
        <dc:creator>Jean-Christian Denis</dc:creator>
                  <category>Articles</category>
                          <category>config</category>
                  <category>debug</category>
                  <category>dev</category>
                <description>&lt;p&gt;Pour aider les développeurs de thèmes et de plugins, Dotclear est doté de deux modes spéciaux. Il est important de savoir quels comportements de Dotclear changent avec l'utilisation de ces modes.&lt;/p&gt; &lt;h5&gt;DEV&lt;/h5&gt;

&lt;p&gt;Le mode DEV est utilisé si la constante &lt;strong&gt;DC_DEV&lt;/strong&gt; est définie à &lt;strong&gt;true&lt;/strong&gt; dans le fichier &lt;strong&gt;config.php&lt;/strong&gt;, on vérifie ensuite sa valeur en utilisant le retour de la méthode &lt;code&gt;App::config()-&amp;gt;devMode(): bool&lt;/code&gt;.
Ce mode est désactivé par défaut sur les versions de distribution stable de Dotclear et activé sur les versions -dev.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Fichier minifié&lt;/strong&gt;&lt;br /&gt;
En mode DEV les fichiers minifiés ne seront pas cherchés et donc pas retournés lors de la demande au serveur de fichiers lancée avec ?pf=, ?vf= cela afin de faciliter la lecture (visuelle) des fichiers sources.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Suffixe de fichier&lt;/strong&gt;&lt;br /&gt;
En mode DEV les demandes faites au serveur de fichiers seront affublées d'un suffixe sous forme d'une chaîne de caractères aléatoires, pour prévenir tout problème de cache.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Module et version du core&lt;/strong&gt;&lt;br /&gt;
En mode DEV les modules des dépôts seront retournés même si leur version minimum de Dotclear ne correspond pas. Attention cette différence peu apporter de la confusion dans le retour de mise à jour de dépôts tiers et dépôts officiels de modules.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Module et erreur&lt;/strong&gt;&lt;br /&gt;
En mode DEV certaines exceptions lancées par des modules (plugins ou thèmes) pourront être accompagnées d'un message plus détaillé (mais comportant des informations plus sensibles).&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Déprécié&lt;/strong&gt;&lt;br /&gt;
En mode DEV, l'utilisation de méthode dépréciée sera enregistrée dans les logs Dotclear. (La table log de la base de données Dotclear) A noter que la fonction de log des dépréciés est munie d'une limite d'enregistrement, les plus anciens seront automatiquement effacés.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Git&lt;/strong&gt;&lt;br /&gt;
En mode DEV, les modules appartenant à un dépôt GIT auront une présentation différente dans la liste des modules.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Admin (backend)&lt;/strong&gt;&lt;br /&gt;
En mode DEV, un bandeau rétractable sera présent en haut de la page d'administration, il affichera différentes informations sur le temps de chargement de la page, l'utilisation mémoire et les variables globales et l'autoloader.&lt;br /&gt;
Les liens vers des fichiers css et js seront affublés d'un suffixe sous forme de numéro de version pour forcer leur rechargement et ainsi prévenir d'éventuels problèmes de cache.&lt;br /&gt;&lt;/p&gt;

&lt;h5&gt;DEBUG&lt;/h5&gt;

&lt;p&gt;Le mode DEBUG est utilisé si la constante &lt;strong&gt;DC_DEBUG&lt;/strong&gt; est définie à &lt;strong&gt;true&lt;/strong&gt; dans le fichier &lt;strong&gt;config.php&lt;/strong&gt;, on vérifie ensuite sa valeur en utilisant le retour de la méthode &lt;code&gt;App::config()-&amp;gt;debugMode(): bool&lt;/code&gt;. Ce mode est désactivé par défaut sur les versions de distribution stable de Dotclear et activé sur les versions -dev.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Exception&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG, les exceptions attrapées par l'application seront accompagnées de leur trace, c'est à dire le déroulement du script jusqu'à l'exception. Le message retourné peut être également plus explicite et retourner plus d'informations utiles mais sensibles.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Fichier minifié&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG les fichiers minifiés ne seront pas cherchés et donc pas retournés lors de la demande au serveur de fichiers lancée avec ?pf=, ?vf=.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Suffixe de fichier&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG les demandes faites au serveur de fichiers seront affublées d'un suffixe sous forme de numéro de version de dotclear, pour prévenir tout problème de cache.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Module et version du core&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG les modules des dépôts seront retournés même si leur version minimum de Dotclear ne correspond pas.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Module et recherche&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG la liste des modules de dépôts aura une colonne supplémentaire, lors de recherche, affichant le score de pertinence de recherche obtenu.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Git&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG, les modules appartenant à un dépôt GIT auront une présentation différente dans la liste des modules.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Admin (backend)&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG, les liens vers des fichiers css et js seront affublés d'un suffixe sous forme de numéro de version pour forcer leur rechargement et ainsi prévenir d'éventuels problèmes de cache.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;jQuery&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG, les options de jQuery migrate seront activées.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Console&lt;/strong&gt;&lt;br /&gt;
En mode DEBUG, la variable JS dotclear.debug passe également à true et permet entre autre de logger les retours d'erreurs des appels REST.&lt;br /&gt;&lt;/p&gt;

&lt;h5&gt;Conclusion&lt;/h5&gt;

&lt;p&gt;Ces deux modes tentent d'apporter de l'aide au développement sous Dotclear en modifiant le comportement de certaines fonctions, mais dévoilent également un peu plus d'informations qui peuvent être sensibles. Il est fortement conseillé de ne pas activer ces modes sur une installation en production.&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.28 de Dotclear.&lt;/q&gt;&lt;/em&gt;&lt;/p&gt;</description>
        
                  <comments>https://dotclear.watch/Billet/Les-modes-DC_DEBUG-et-DC_DEV#comment-form</comments>
          <wfw:comment>https://dotclear.watch/Billet/Les-modes-DC_DEBUG-et-DC_DEV#comment-form</wfw:comment>
          <wfw:commentRss>https://dotclear.watch/feed/atom/comments/40</wfw:commentRss>
              </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>
      </channel>
</rss>
