31 03 2010
[Wiki] Le fonctionnement des plugs

WB Picture


Ce ticket a pour seule vocation de décrire le fonctionnement des "plugs" sur mon système de blog. Les plugs sont ce que les gens appellent généralement des "modules d'extension" ou encore des "plug-ins", "add-ons" voire "add-ins". Cela permet d'apporter des possibilités au système dans le but de répondre à une fonctionnalité manquante ou non adapté aux personnes.

Je tiens à dire que je ne connais aucunement le fonctionnement des plug-ins sur n'importe lequel CMS ou moteur de blog (dotclear, wordpress), j'ai voulu faire quelque chose à ma façon et qui ne viendrait pas dénaturer (trop) le "core"/noyau de mon système. Donc une marge de personnalisation mais pas trop, on va voir ça de toute façon.



Un exemple de plug: Gravatar

WB Picture


Gravatar est un service proposé par le site du même nom mais avec un .com à la fin qui permet à un utilisateur inscrit là bas d'uploader son avatar et de le voir afficher sur chaque site qui utilise gravatar. Pratique et intéressant (dans le sens où un blog propose - rarement - une inscription pour se faire un profil).

Gravatar fonctionne en prenant l'adresse e-mail rempli lorsque l'on écrit un commentaire et appelle une image "MD5ée" de l'email sur les serveurs de gravatar. Pour se faire, il faut donc que mon plug puisse fonctionner dans "les commentaires" et modifier (ou ajouter, mais nous verrons ça plus loin) l'e-mail du commentateur en lien pointant vers l'image.

Comment cela marche ?

WB Picture


Pour qu'un plug soit détectable pour W.B, il faut absolument que 3 fichiers php soit présent dans son arborescence:
  • info.php
  • init.php
  • setup.php
  • (et optionnellement) admin.php


* info.php

Code: php

<?php
$name 
"Gravatar";
$version "beta1";
$author "bosam";
$email "bosam@postalfr.com";
$website "";
$logo_img "images/gravatar.jpg";
$logo_mini "images/gravatar_mini.jpg";

$description GRA_DESC;

// Admin
$admin_area TRUE;
?>


Ce fichier sert à renseigner les informations nominatives du plug. A part les variables générales (author, name, etc...) on remarque deux $logo_img et $logo_mini qui correspondent à l'adresse des images du plug (qui s'affichera dans le menu d'administration). On remarque aussi que la variable $description correspond à une constante (nous y reviendrons plus loin), cela dans le but de supporter le multi-langage. Aussi, si le plug à des options pouvant être modifiée via une interface, il faut mettre la variable $admin_area à TRUE.

WB Picture
WB Picture


* init.php

Code: php

<?php
// What to do when loaded
include('config.inc');

// Specific to commentaries
$setSection "comments";

$createTag '{gravatar}';
$runFunction = array("Gravatar_me" => array('{mail}'$default$size));

function 
Gravatar_me($email$default$size)
{
    return 
"<img src=\"http://www.gravatar.com/avatar.php?gravatar_id=".md5(strtolower($email))."&default=".urlencode($default)."&size=".$size."\" />";
}
?>


Ce fichier permet, comme son nom l'indique, de lancer des fonctions lorsqu'il s'initialise (c'est à dire lorsque les plugs "activés" sont parsés).

> include('config.inc' );

On inclut la configuration de gravatar (ici, $default qui correspond à l'adresse de l'image par défaut si l'utilisateur n'a pas de compte sur gravatar et $size qui est la taille par défaut de l'image).

> $setSection = "comments" ;

Ensuite on spécifie que le plug va toucher au commentaires spécialement. Il est possible de le faire toucher à d'autres sections aussi, tel que "admin", "design", etc... . Pour cela, il faut définir $setSection = array('comments', 'design' ).

Maintenant, il faut savoir qu'après avoir récupérer les informations dans la base de donnée, le système les stockent dans un tableau suivant:
Code: php

<?php
$vars 
= array('{nameaut}'     => $nameaut,
             
'{date}'         => $dateT,
             
'{date=mini}'     => $this -> parser -> Decode_Date($datetimeFALSEFALSETRUE),
             
'{dateN}'         => $dateN,
             
'{time}'         => $time,
             
'{time=mini}'     => substr($time06),
             
'{com}'         => $com,
             
'{mail}'         => $mail);
?>

Donc si il nous faut accéder au nom d'un auteur de commentaire, il faudra retenir le tag {nameaut} et ainsi de suite.

> $createTag = '{mail}';
> $runFunction = array("Gravatar_me" => array('{mail}', $default, $size));


Ici, on veut que le tag {mail} soit remplacer par ce que la fonction Gravatar_me renverra (c'est à dire l'image).
Mais il est tout à fait possible de créer un nouveau tag {gravatar} et de le rajouter dans le design à l'endroit souhaité.
Maintenant que l'on sait comment s'appelle les variables que l'on veut récupérer, on spécifie dans la variable $runFunction un tableau qui contient le nom de la fonction à appeler et les variables à renseigner.

N.B: Il est aussi à noté que l'on peut créer plusieurs tags différents en rentrant un tableau. Le premier tag sera remplacé par la première fonction et ainsi de suite.
Code: php

<?php
$createTag 
= array('{mail}''{gravatar}');
$runFunction[] = array("Gravatar_me" => array('{mail}'$default$size));
$runFunction[] = array("Mon_autre_fonction" => array('{com}'));
?>


* setup.php

Code: php

<?php
// Install
function Setup(){ return true; }
// Uninstall
function Uninstall(){ return true; }
?>


Ce fichier définie ce qu'il faut faire lorsque l'on installe ou désinstalle un plug. Dans ce cas, il faut que la fonction renvoie true pour être prise en compte pour le reste de l'installation.

Dans le cas de Gravatar, on ne rajoute rien dans la base de donnée et on en modifie rien donc les fonctions sont juste là à titre de support mais sont inuitiles. (Mais dans le cas de WeTalk - chatbox ajaxée -, le setup contient les tables SQL à insérer et la désinstallation permet de les supprimer).

* (optionel) admin.php

Dans le cas où un plug doit être administrer par une interface, il faut spécifier la variable $admin_area à vrai et créer ce fichier.
Pour gravatar, c'est un petit plus que j'ai crée car je ne voulais pas changer à la main les différentes variables en allant dans les fichiers.

Code: php

<?php

if (isset($_POST['gravatar'])){
    
$tag_g $_POST['tag'];
    
$dest_g $_POST['dest'];
    
$size_g $_POST['size'];
    
    
$file '<?php

$createTag = \''
.$tag_g.'\';
$default = "'
.$dest_g.'";
$size = '
.$size_g.';

?>'
;

    if (
file_put_contents(PATH.'config.inc'$file)){
        
Tools::Make_Msg(Manipulation réussie !, $bFade=TRUE$bBack=FALSE$id='we_log');
    }else{
        
Tools::Make_Msg(Echec lors de la manipulation$bFade=TRUE$bBack=FALSE$id='we_log');
    }
}

include(
PATH."config.inc");
$array = array('{createTag}'    =>    $createTag,
               
'{dest}'            =>    $default,
               
'{size}'            =>    $size);


?>


Sans trop rentrer dans les détails, le fichier se charge d'écrire dans le fichier config.inc.


WB Picture


Les autres fonctions...
* Multi-langage

En créant un répertoire lang dans l'arborescence, vous pouvez y mettre un fichier [votre langue].php et le renseigner avec des constantes de langue.

Code: php

<?php

// General
define("fr""fr"); // Langue de ce fichier utilisé par le blog (en petits caracteres svp : "fr" est compté sinon "en-us" est choisit par défaut)

define("GRA_DESC""Gravatar vous permet d'utiliser le système d'avatar en ligne (gravatar.com)");

define("GRA_TAG""Tag ajouté ou remplacé");
define("GRA_DEFAULT""Image lorsque il n'y a aucun gratavar");
define("GRA_SIZE""Taille (x / x)");
define("GRA_MODIFY""Modifier");
?>


Il suffit ensuite dans votre fichier init.php de spéficier le préfixe utiliser par votre plug (ici GRA_) en utilisant:

> $setTranslation = "GRA_";

Note: Vous remarquerez que cette variable n'existe pas dans notre exemple, et c'est seulement dû au fait que les variables à remplacer sont mise en "clair" dans le fichier info.php. Ce point est encore à éclaircir car l'exemple ne s'y prête pas trop.

* Gérer le <head>, le <body>

> $setHead = "";

Permet de rajouter des instructions dans entre les balises <head> et </head> (seulement si le $setSection est "design" ou "admin" ). Utilisé dans les plugs qui rajoutent des styles CSS ou du code Javascript.

> $setBody = array('<body>', $chatbox, 'A' );
> (similaire à ) $setBody = $chatbox;


Cette instruction permettra de rajouter après la balise <body>, le contenu de la variable $chatbox. Si on a besoin d'insérer à la fin de la page, il faut mettre '</body>' et 'B' en option.

* Ajout de bbcode(s) personnalisés

Comme pour les langues, il faut créer un dossier bbcode et à vous les bbcodes personnalisés !

* Gestion des plugs

Bien sûr, je l'ajoute mais les plugs sont installables et/ou activables-désactivables.

En conclusion

Il n'y a pas (à vrai dire) de barrière entre un plug et le système (dans le sens où les classes dédiées sont utilisables - principalement la classe de Template et de Log) donc cela confère une grande maniabilité mais aussi un grand n'importe quoi si l'on en vient à installer des plugs inconnus.

J'ai voulu faire quelque chose de moins difficile à maitriser pour ceux qui ne connaissent pas les entrailles du système comme moi (normal on va dire :D ) et j'peux dire que comparé à l'ancienne version des plugs, y'a eu un grand chemin !

Mais celà n'est pas fini et il reste encore des améliorations à apporter tel que l'ajout par les plugs de "pages" traitées exclusivement par eux.

En conclusion, prévoir ce que les gens voudront rajouter comme fonction est aussi difficile que de les traiter ! :D

Ajouter un commentaire
Contrôle anti-spam
Veuillez recopier le code de l'image.
(Attention ! Il peux y avoir 3 ou 4 caractères à recopier; si ce n'est pas le cas, redemander un code)

:



Identification normale

Gras Italique Souligné Barré Gauche Centré Droite Lien Liste Liste numérotée Citation Couleur Taille Code
|
1 - 2 - 3 - 4 - 5 - 6 - 7»(44)
ProfilProfil WeBlog Par bosam email http://scr.im/bosam Bienvenue sur mon blog !
Je me présente, je me surnomme bosam. Ce que vous voyez a été fait par moi-même. Ce blog est assez personnel dans le sens où vous aurez quelques moments privés de ma vie écrit.
Toutes les fonctionnalités marchent (enfin jusqu'à que vous me mailiez pour m'avertir d'un bug) !
Il y a un côté multi-utilisateurs car plusieurs de mes amis ont postés des tickets/articles.
Bonne visite :) !

P.S: Si vous voyez un bug, n'hésitez pas à me mailer.
Changer de langue ? en-US fr
Calendrier Calendrier
« Septembre 2010 »
Lun Mar Mer Jeu Ven Sam Dim
01 02 03 04 05
06 07 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Rechercher Rechercher
Votre mot-clé (3 lettres min.)
Catégories Je parle de...
  • Toutes les catégories
  • W(e)Blog News (32)
  • OpinionToDo (84)
  • Tests (4)
  • Poem (9)
  • Insolite (17)
  • Zeux du moment (8)
  • Zik du moment (9)
  • Séries (8)
  • My Scripts (5)
  • Raconte moi la sèche (29)
  • Shoes Me (6)
  • Les sorties (5)
  • Bakayaro.com (2)