====== Convention de codage de Dotclear =======
Que vous développiez un plugin, vouliez corriger un bug ou simplement ajouter une fonctionnalité, le suivi de ces quelques règles est nécessaire.
===== Code PHP =====
==== Configuration de PHP =====
Tout le code de Dotclear doit fonctionner avec cette configuration de PHP :
* short_open_tag = Off
* allow_call_time_pass_reference = Off //(Disponible jusqu'en PHP 5.4.0)//
* error_reporting = E_ALL | E_STRICT
* display_error = On
* register_globals = Off //(Disponible jusqu'en PHP 5.4.0)//
* magic_quotes_gpc = Off
* allow_url_fopen = Off
Le code doit fonctionner avec PHP 5.5 minimum.
Pour passer la valeur de error_reporting à ''E_ALL | E_STRICT'', il faut décommenter le début du fichier ''/dotclear/inc/prepend.php'' en ajoutant un slash (''/'') avant ''/*== DC_DEBUG =='' ou ajouter ce code à la fin du fichier ''/dotclear/inc/config.php'' pour ne pas gêner la mise à jour automatique :
ini_set('display_errors',true);
error_reporting(E_ALL | E_STRICT);
==== Indentation, longueur des lignes ====
Utilisez si possible le référentiel [[http://www.php-fig.org/psr/psr-2/|PSR-2]] et a minima une indentation de 4 espaces (pas de tabulations) pour PHP, 2 espaces pour Javascript,CSS,HTML,XML,…
==== Structures de contrôle ====
Les structures de contrôle sont les instructions if, switch, for, while, foreach, etc. Vous devez laisser un espace entre le mot clé de l'instruction et la condition. La position des accolades est à votre discrétion.
=== Exemple de structures de contrôles : ===
$v)
{
action;
action;
}
?>
==== Appels de fonctions ====
Les fonctions sont appelées sans aucun espace entre le nom de la fonction, les parenthèses et les paramètres. Par exemple :
Si la fonction est retournée dans une variable, on mettra au moins un espace de part et d'autre du signe égal. Par exemple :
==== Définitions des fonctions ====
Les accolades de la fonction sont placées sous le nom de celle-ci et le code est indenté d'un niveau. Par exemple :
==== Commentaires ====
Les commentaires d'une ligne sont fréquemment faits avec le signe #, moins avec les %%//%%. Les commentaires de plusieurs lignes seront faits avec le style /* commentaire */
La désactivation d'une portion de code par un commentaire sera faite avec le code /* %%//%%*/, de cette manière, il suffit d'ajouter un / pour désactiver le commentaire. Par exemple :
Vous pouvez utiliser les conventions de Doxygen pour commenter votre code à la manière de Dotclear :
* [[http://www.stack.nl/~dimitri/doxygen/docblocks.html|documentation générale de Doxygen]]
* [[http://www.stack.nl/~dimitri/doxygen/commands.html|commandes spéciales de Doxygen]]
==== Inclusions de fichiers ====
Un fichier est inclus dans un autre relativement au premier. Cela est obligatoire. Par exemple :
==== Tags dans le code HTML ====
Le code PHP est toujours délimité par et non la version abrégée ?>. Ceci est obligatoire. La forme = ?> est bien entendu proscrite.
==== Conventions de nommage ====
=== Classes ===
Les classes sont toujours nommées avec des lettres non accentuées. Les mots sont séparés par des majuscules et le nom de la classe commence par une minuscule. Par exemple :
=== Fonctions ===
Les noms de fonctions suivent les même règles que les classes.
=== Variables ===
Les noms des variables doivent avoir un sens. Les mots sont séparés par des _. Par exemple :
===== Conventions HTTP =====
Dotclear se conforme au maximum à HTTP ce qui implique de suivre un certain nombre de règles.
==== Modification de données ====
Tout changement d'état (dans la base de données ou ailleurs) doit **obligatoirement** passer par une requête HTTP de type POST.
Par ailleurs, toute requête de ce type doit envoyer un champ nommé "xd_nonce" contenant un identifiant permettant d'assurer la légitimité de celle-ci.
Il est donc nécessaire de passer ce champ à tout formulaire de type POST. Par exemple :
L'appel à la méthode $core->formNonce() insère automatique un champ caché contenant la valeur du //nonce// dans le formulaire.
Enfin, ce qui est valable pour les soumissions de formulaire l'est également pour les requêtes faites via //XML HTTP Request// (Ajax) de type POST. Dotclear fournit une variable javascript contenant le //nonce// : dotclear.nonce.
Exemple de requête ajax avec le nonce :
params = {
xd_check: dotclear.nonce,
p: "param"
};
$.post(url,params,function() {
...
});
La vérification du //nonce// est automatique et son usage n'est requis que pour la partie d'administration de Dotclear, pas pour la partie publique.
===== Code HTML =====
Veillez à valider le code HTML de votre thème ou plugin.
===== Base de données =====
Pour qu'un plugin ou un thème qui accède à la base de données puisse fonctionner sur tous les blogs, il faut qu'il soit testé avec les bases de données MySQL et PostgreSQL (PGSQL). Si vous ne pouvez effectuer de tests avec un de ces types de base de données, demandez de l'aide sur le [[http://forum.dotclear.net/|forum]].