Création d'un plugin pour dotclear 2 - étape 1

Dans un série d'articles, je vais tenter d'expliquer de manière progressive de quelle manière écrire un plugin pour dotclear 2. Je vais baser mes explications sur l'écriture du premier plugin que j'ai écrit qui permet d'ajouter une page "à propos" à mon blog.

Introduction

Je suppose que vous connaissez dotclear 2, et évidemment que vous connaissez php. L'écriture d'un plugin a le gros avantage de pouvoir ajouter des fonctionnalités sans toucher au coeur de l'application.

Dans dotclear, les plugins vivent dans le répertoire plugins de l'application, à savoir dans le répertoire dotclear/plugins (répertoire défini par la constante DC_PLUGIN_ROOT située dans le fichier de configuration inc/config)si vous n'avez pas renommer le répertoire d'installation.

On va donc créer un sous répertoire dans ce répertoire que l'on appelera aboutPage. Désormais, tous les fichiers ou répertoires que nous ajouterons seront dans ce répertoire aboutPage.

Déclaration du plugin

La déclaration du plugin auprès de dotclear va se faire à travers un fichier _define.php. On retrouve ce même fichier de déclaration dans les thèmes. Il a la structure suivante:

<?php
$this
->registerModule(
              
"aboutPage",
              
"Gestion de la page about",
              
"Nicolas",
              
'0.0.1',
              
'usage,contentadmin'
              
);
?>

On retrouve en premier paramètre de la méthode registerModule , le nom du plugin (le nom du répertoire pour faire simple même si ce n'est pas lié), en deuxième paramètre un bref descriptif qui apparaîtra sur la page listant les modules installés, en troisième l'auteur, en quatrième la version et pour terminer les permissions (les permissions définies ici signifie que le plugin sera chargé par n'importe quel utilisateur pouvant se connecter sur l'interface d'administration). En fait il y a un cinquième argument qui est la priorité mais que l'on va oublier pour le moment. Et c'est tout. Si on va sur la page listant les plugins, on va voir apparaître le plugin avec son nom, sa version et sa brève description. Facile, non ?

Interface publique

Pour le moment, le plugin ne fait absolument rien! Nous allons déclarer la page about, de la même manière que les pages post, tags ou category. Cette déclaration se fait dans un fichier _public.php.

<?php
$core
->url->register('about','about','^about','aboutCallBack');

function
aboutCallBack($args) {
  echo 
"A propos";
  exit();
}
?>

Ce code est un peu plus complexe mais reste encore assez simple ! La méthode register de l'object $core->url attend 4 paramètres qui sont respectivement l'identifiant unique de l'url, la forme de base de l'url, une expression régulière permettant de reconnaître l'url (ici elle est simple car on n'attend aucun paramètre, juste about) et pour terminer la fonction (fonction dite de callBack) à appeler si l'url est reconnue.

Mais pour que cette page soit déclarée "proprement" avec les autres (post, search, tags,...) et bénéficient des autres méthodes de l'application, on va définir une classe qui va hériter de la classe dcUrlHandlers. Pour pouvoir utiliser une méthode de callback au lieu d'une fonction, on utilise un tableau. Pour le reste cela ne change rien:

<?php
$core->url->register('about','about','^about',array('urlAboutpage','about'));

class 
urlAboutpage extends dcUrlHandlers
{
  public static function 
about($args) {
    echo 
"A propos";
    exit();
  }
}
?>

Cette fois, le plugin est fonctionnel quoi qu'un peu pauvre en fonctionnalités. Il manque un moyen pour modifier la page "à propos", un moyen simple pour mettre en ligne la page dans le menu de droite (sidebar) via les widgets... Ce n'est que le début!

En pièce jointe, vous trouverez une archive contenant les deux fichiers crées (_define.php et _public.php)

Haut de page