Chapitre 5 - Développement
5.1. Synopsis
en cours d'écriture
5.2. Plugins
5.2.1. Les autres plugins natifs
5.2.1.1. SmartyPants, une typographie intelligente
SmartyPants est un plugin permettant d'améliorer la typographie des ressources. C'est une adaptation pour Plume CMS de PHP Smartypants. Le site de l'auteur originel décrit bien son fonctionnement, nous le citons donc partiellement :
PHP Smartypants permet de facilement transformer une ponctuation faite de simples caractères ASCII en entités HTML de ponctuation « typographiquement intelligente ».
SmartyPants effectue les transformations suivantes :
* Citations à guillemets obliques (``) en entités HTML de guillemets “courbes” ;
* Tirets («--») en entités HTML de tiret long ;
* Trois points consécutifs («...») en une entité HTML de points de suspension.
SmartyPants ne modifie pas les caractères à l'intérieur des balises<pre>,<code>,<kbd>,<math>(ndlr : balise d'introduction à des instructions MathML), ou<script>. Normalement, ces balises sont utilisées pour afficher du texte où les guillemets courbes et le reste de la ponctuation intelligente ne serait pas approprié, comme du code.
Les fichiers relatifs au plugin se situent dans le dossier /manager/tools/smartypants. Il est tout à fait envisageable de personnaliser les transformations opérées par SmartyPants. La configuration se fera dans le fichier register.php selon les options décrites dans la mini-documentation PHPSmartyPantsReadMe.txt.
5.2.1.2. Vegetarian, une solution de prévention du spam
Vegetarian (ou végétarien pour franciser) est à l'origine un plugin pour Wordpress qui a fait l'objet d'une adaptation pour Plume CMS. Il a pour vocation la prévention du spam dans les commentaires. Pour remplir à bien sa mission, il effectue deux contrôles sur tous les nouveaux commentaires postés :
- Il vérifie que le contenu du commentaire comporte plus de 20 caractères ; le cas contraire, le commentaire est marqué comme étant un spam.
- Il confronte l'IP de l'auteur du commentaire à des services de blacklists de spams. Si, à l'issue de cette confrontation, il est avéré que l'IP en question est présente dans une de ces blacklists, le commentaire sera marqué comme étant un spam.
Ces dites blacklists, ou listes noires, sont des bases de données regroupant certaines informations, comme l'IP, de spammers. SORBS, Spamhaus et DSBL sont des organisations parmi d'autres qui gèrent ces listes dont Vegetarian fait usage.
Le code du plugin est situé dans le dossier /manager/tools/vegetarian.
5.2.2. Installer un plugin
en cours d'écriture
5.2.3. Créer un plugin
en cours d'écriture
5.3. Boîte à outils
en cours d'écriture
5.3.1. Base de données
L'API relative aux manipulations de la base de données est divisée ainsi :
- la classe
Connectionissue du fichier/manager/extinc/class.mysql.php; - la classe
SQLissue du fichier/manager/inc/lib.sql.php; - la fonction
pxDBConnectissue du fichier/manager/inc/lib.sqlutils.php.
en cours d'écriture
5.3.1.1. Effectuer une requête
En supposant que l'on veuille extraire la liste des rédacteurs inscrits, voici la code PHP effectuant la requête :
function getAllTheAuthors()
{
$con =& pxDBConnect();
$sql = 'SELECT user_username FROM '.$con->pfx.'users';
$res = $con->select($sql);
return $res;
}
La connexion à la base de données est assurée par pxDBConnect(). On prend ensuite en considération l'éventualité où les tables de la bases sont préfixées via $con->pfx. Enfin, $con->select($sql) se charge de passer la requête à la base et $res contiendra le résultat.
5.3.2. Hooks
en cours d'écriture
5.3.3. Variables accessibles
en cours d'écriture
5.4. Localisation et Internationalisation
5.4.1. Localisation
Tout comme GNU gettext, le système de localisation est basé sur des fichiers. Ceux-ci sont regroupés par langues et parties de Plume CMS.
Le processus sous-jacent à la localisation, à savoir le système de fichiers et leurs structures internes, est à mettre en parallèle avec le plugin Poisson de Babel.
5.4.1.1. Emplacements des fichiers de localisation
De manière générique, on retrouvera les fichiers de localisation, dont l'extension est *.lang, dans les dossiers /locale/XX où XX correspond au code ISO de la langue ; par exemple :
-
/locale/frpour les fichiers de localisation française ; -
/locale/enpour les fichiers de localisation anglaise ; -
/locale/depour les fichiers de localisation allemande.
Dans l'optique où l'emplacement de ces répertoires reflètent les parties de Plume CMS qui seront effectivement traduites, on les repère dans les sources aux endroits suivants :
-
/manager/qui proposent la localisation générale de l'application (plume.lang) et de l'assistant d'installation (install.lang). En d'autres termes, les chemins d'accès à ces fichiers seront :-
/manager/locale/XX/plume.lang -
/manager/locale/XX/install.lang
-
-
/manager/tools/monPlugin/. En effet, tout plugin disposant une interface, qu'elle relève de l'utilisation ou de la configuration, se doit d'appliquer le principe de localisation. Partant de là, les chemins d'accès seront, pour les plugins pré-existants, de la forme suivantes :-
/manager/tools/babel/locale/XX/babel.lang -
/manager/tools/htaccess/locale/XX/htaccess.lang -
/manager/tools/info/locale/XX/info.lang -
/manager/tools/plumeconf/locale/XX/plumeconf.lang -
/manager/tools/searchmng/locale/XX/searchmng.lang -
/manager/tools/smart404/locale/XX/smart404.lang -
/manager/tools/toolsmng/locale/XX/toolsmng.lang -
/manager/tools/visualedit/locale/XX/visualedit.lang
-
5.4.1.2. Format des fichiers de localisation
Le format à respecter pour les fichiers de localisation est relativement simple. Illustrons-le avec les premières lignes du fichiers plume.lang :
# -*- coding: utf-8 -*- # (C) 2004 Loïc d'Anterroches, Cédric Arrabie ;There is an error with your login or your password. Il y a une erreur dans votre identifiant ou votre mot de passe. ;Login: Identifiant :
Les deux premières lignes constituent l'entête, ou header en anglais. Il contient :
- l'information d'encodage du fichier. L'utilisation d'utf-8 est obligatoire.
- l'information de copyright. Il suffit d'y indiquer son nom et, éventuellement, son courriel et la date.
Suit alors les traductions elles-mêmes. Elles sont formées sur un bloc de trois lignes ainsi :
- la chaîne de caractères originelle ;
- la chaîne localisée, ou traduite ;
- une ligne vide.
Le travail de traduction est alors assez aisé puisqu'on a un accès direct aux textes à traduire.
5.4.1.3. Outil pour la localisation
Afin de vous aider dans le processus de localisation, le script getlocale.php a été mis à disposition dans le dossier du Manager. En substance, il permet de générer automatiquement des fichiers de localisation prêt à l'emploi, ainsi que de mettre à jour ceux déjà présents.
Usage général de getlocale.php:
getlocale.php?lang=(fr|dk|sk_src|...)
Pour des raisons inhérentes à la sécurité de Plume CMS, vous devrez effectuer une petite manipulation sur ce fichier avant toute utilisation :
- Editez le fichier
/manager/getlocale.php; - Commentez les lignes 8, 9 et 10 ;
Nota Bene : Lorsque le travail de localisation est achevé, il est conseillé de décommenter lesdites lignes.
Le script est désormais utilisable ! Admettons que l'on s'apprête à localiser Plume CMS en japonais, voici les étapes à suivre :
- Créez le dossier
/manager/locale/ja/; - Créez pour chaque plugin le dossier idoine :
/manager/tools/monPlugin/locale/ja/; - Exécutez le script
getlocale.phpà partir du Manager ainsi :getlocale.php?lang=ja. A l'issue de l'exécution, tous les dossiers que vous avez préalablement créer contiennent désormais des fichiers*.lang. - Si un fichier
*.langétait déjà présent, une sauvegarde d'icelui est effectuée et le fichier sera mis à jour. Dans tous les cas, l'ancien travail ne sera pas perdu. - La localisation peut maintenant commencer...
Remarque : L'exécution du script getlocale.php renvoie un log, ou compte-rendu, des opérations effectuées. Il est probable qu'il contienne des avertissements PHP de ce type :
/home/www/plume/manager/tools/smartypants/register.php [1166 lines - 0 strings] Statistics Parsed files - 1 Unique strings - 0 Generate - /home/www/plume/manager/tools/smartypants/locale/ja/smartypants.lang <br /> <b>Warning</b>: fopen(/home/www/plume/manager/tools/smartypants/locale/ja/smartypants.lang) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory in <b>/home/www/plume/manager/getlocale.php</b> on line <b>162</b><br /> <br /> <b>Warning</b>: fputs(): supplied argument is not a valid stream resource in <b>/home/www/plume/manager/getlocale.php</b> on line <b>163</b><br /> <br /> <b>Warning</b>: fclose(): supplied argument is not a valid stream resource in <b>/home/www/plume/manager/getlocale.php</b> on line <b>168</b><br /> New strings - 0 Parse files
Ces avertissements signifient simplement que, pour l'emplacement donné, celui du plugin SmartyPants dans l'exemple, les fichiers de localisation n'ont pas pu être créés car l'arborescence /locale/ja/ n'existe pas. Vous rencontrerez ces messages notamment dans le cas des plugins ne disposant pas d'interface graphique propre.
5.4.1.4. Mise à jour des fichiers de localisation
Pour mettre à jour un ou plusieurs fichiers de localisation, il suffira de lancer getlocale.php avec le ou les arguments adhoc. Le script gardera les chaînes valides, ajoutera les nouvelles dont la traduction est à effectuer et placera en fin de fichier les chaînes qui ne sont plus utilisées. Les anciens fichiers *.lang sont conservés : l'extension est simplement modifier en *.lang.back. S'il existe déjà un fichier de sauvegarde, c'est celui-ci qui sera conservé.
5.4.2. Internationalisation
en cours d'écriture