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

Ce troisième volet de l'écriture d'un plugin pour dotclear 2, fait suite à la mise en place du plugin et à l'ébauche de la partie administration

Cette fois-ci, nous allons gérer l'ajout du lien dans le menu de droite (sidebar) via les widgets (widgets de présentation).

L'ajout d'un widget consiste simplement à ajouter deux nouveaux comportements (behaviors) initDefaultWidgets et initWidget qui respectivement permettent d'ajouter un widget dans la liste des widgets disponibles et qui permettent d'initaliser un widget. Cela se fait simplement avec le code suivant:

<?php
$core
->addBehavior('initWidgets',array('AboutPageWidgets','initWidgets'));
$core->addBehavior('initDefaultWidgets',array('AboutPageWidgets','initDefaultWidgets'));

class 
AboutPageWidgets
{
  public static function 
initWidgets(&$w) {
  }

  public static function 
initDefaultWidgets(&$w,&$d) {
  }
}
?>

La méthode initDefaultWidgets n'attend qu'un paramètre qui est le tableau dans lequel ajouté le nouveau widget. On va l'ajouter dans le tableau $d['extra']. La méthode initWidget crée le widget (méthode create) et permet de fixer des paramètres. On va mettre un titre à notre widget. La méthode create attend trois paramètres : le namespace, un titre et une fonction de callback (ce sera une méthode static de la classe AboutPageWidgets). La fonction de callback gère l'affichage proprement dit en fonction des paramètres et du titre. Cela donne cela:

<?php
$core
->addBehavior('initWidgets',array('AboutPageWidgets','initWidgets'));
$core->addBehavior('initDefaultWidgets',array('AboutPageWidgets','initDefaultWidgets'));

class 
AboutPageWidgets
{
  public static function 
initWidgets(&$w) {
    
$w->create('about_page',__('About'),array('AboutPageWidgets','about'));
    
$w->about_page->setting('title',__('Title:'),__('About'));
  }

  public static function 
initDefaultWidgets(&$w,&$d) {
    
$d['extra']->append($w->about_page);
  }

  public static function 
about(&$w) {
    global 
$core;

    if (!
$core->blog->settings->aboutpage_active
    
or !$core->blog->settings->get('aboutpage_post_id')) {
      return;
    }    
    
    
$res '<div id="about">';
    
$res .= '<a';
    if (
$core->url->type==$core->url->getBase('about')) {
      
$res .= ' class="about"';
    }
    
$res .= ' href="'.$core->blog->url.$core->url->getBase('about');
    
$res .= '"><span>'.html::escapeHTML($w->title).'</span></a></div>';
    return 
$res;
  }
}
?>

Rien de bien complexe. Tout le "sale" boulot est fait par le plugin widgets!

Haut de page