Extension pour Dotclear 2 : créer un widget à l'aide d'un simple fichier template html
Par Olivier Azeau, le 30 mars 2008, 18:29 - Amanèls
- Lien permanent
-
Les widgets sont une nouveauté de Dotclear 2. Ils permettent de définir facilement le contenu des barres latérales d'un blog. Un petit nombre de widgets sont disponibles dans l'installation de base. D'autres sont rajoutés à travers des extensions.
La principale barrière à la définition de nouveaux widgets est la nécessité de savoir programmer une extension Dotclear en PHP. Cela se justifie pour les nombreux widgets qui réalisent des opérations non triviales. Cependant, un certain nombre d'entre eux se limitent à réaliser un affichage html prédéfini et agrémenté de quelques éléments paramétrables. Cela m'a donné l'idée de réaliser une extension Dotclear 2 qui permet de rajouter des widgets à l'aide d'un simple fichier html de thème dotclear.
Cette extension fonctionne très simplement : elle recherche dans les dossiers de thème tous les fichiers se terminant par ".widget.html" et elle crée un widget à partir de chacun d'entre eux.
Exemple minimaliste de fichier ".widget.html" :
<tpl:WidgetName>Mini</tpl:WidgetName>
Bonjour {{tpl:WidgetText name="nom" title="Entrez votre nom :" default="visiteur"}} !<br/>
Vous êtes sur le blog {{tpl:BlogName}}.<br/>
Le <tpl:WidgetName> définit le nom du Widget tel qu'il apparait dans la zone d'administration. Le {tpl:WidgetText} définit un paramètre de type texte pour le widget dont le contenu sera inséré à l'affichage.

A titre d'exemple, deux fichiers widget sont installés en même temps que l'extension. Un pour insérer le code nécessaire à Google Analytics, l'autre pour en faire de même avec PhpMyVisites.
L'insertion de paramètres de type texte est ce qu'il y a de plus simple mais on peut définir d'autres types de paramètres (grande zone de texte, case à cocher, liste de choix) en utilisant les balises appropriées. Voici la liste complète :
{tpl:WidgetText}: paramètre de type texte ou grande zone de texte en rajoutant un attribut type="textarea".<tpl:WidgetCheckboxIf>: paramètre de type case à cocher. L'attribut value détermine si le contenu du block est affiché. Avec value="1", le contenu est affiché si la case est cochée. Avec value="0", le contenu est affiché si la case n'est pas cochée.<tpl:WidgetComboIf>: paramètre de type liste de choix. Fonctionnement similaire Ã<tpl:WidgetCheckboxIf>. L'attribut options définit la liste des choix possibles (séparés par des ":").{tpl:WidgetCombo}: paramètre de type liste de choix. Fonctionnement similaire Ã{tpl:WidgetText}. Attribut options identique à celui de<tpl:WidgetComboIf>.
Outre les attributs spécifiques, chaque balise possède les attributs :
- name (obligatoire) : nom du paramètre
- title (obligatoire) : texte affiché à côté du paramètre dans la zone de définition du widget
- default (optionnel) : valeur initiale
- order (optionnel) : ordre d'apparition dans la zone de définition du widget
Pour utiliser plusieurs fois le même paramètre dans le fichier html, il n'est pas nécessaire de répéter l'ensemble des attributs. La totalité des attributs obligatoires doivent être présents à la première apparition du paramètre. Par la suite, seul l'attribut "name" nécessite d'être précisé.
Les fichiers "demo.widget.html" et "last.comments.widget.html" fournis avec l'extension démontrent l'éventail de ces possibilités.
D'autres balises facilitent l'écriture de widgets :
<tpl:WidgetDefineBlock>: définit un block html réutilisable. L'attribut "name" identifie le block.{tpl:WidgetUseBlock}: insère le contenu d'un block réutilisable. L'attribut "name" identifie le block.<tpl:WidgetPageTypeIf>: conditionne l'affichage d'un block au type de page. L'attribut "type" définit le type de page. Permet, par exemple de n'afficher un widget que sur la page d'accueil.
La méthode préférée pour remonter les problèmes est le gestionnaire de demandes sur Google Code.
Concernant les explications sur l'utilisation, je peux répondre en commentaire ici-même ou sur le forum dotclear.
Toute suggestion est la bienvenue.


Commentaires
oula ! ça commence à devenir un site pour les pros ici ;) En tous cas, merci de fournir toutes ces explications car c'est en sachant les choses que l'on gagne en capacité d'autodétermination.
"Grandir ensemble", un slogan qui n'est pas vide de sens ici !
Et en plus ça permet d'occuper mon esprit à faire des choses plus utiles...
Bonjour
J'apprécie beaucoup l'utilité de ton plugin, c'est une solution élégante.
Mais comment faire pour afficher un Widget ailleurs que dans la sidebar?
Je pense à ta solution pour une table des matières,vue sur le forum, mais il me faudrait plus de place que la sidebar.
Dans un template, le problème est d'afficher conditionnellement, par exemple si le titre du billet est "Plan du Site".
Il y a peut être une solution par les pages "related" ?
Je suis nouveau en DC2 mais je me débrouille en PHP.
Si tu peux éclairer ma lanterne, merci d'avance.
Ps: ton lien vers la version pkg.gz ne marche pas chez moi. J'obtiens une page html qui affiche le contenu compressé !
Par définition, un widget c'est un élément de sidebar. Pour mettre des choses "ailleurs", il ne faut pas utiliser les widgets, il faut modifier le thème d'affichage.
Pour afficher conditionnellement, ma solution favorite est celle que j'utilise dans l'extension "simple website" :
Dans le fichier post.html, j'introduit un block
<tpl:swCustomPostContent>autour du contenu du billet. La présence de ce block me permet de surcharger le comportement par d'affichage défaut en associant optionnellement à chaque billet un bout de template qui remplacera le contenu.J'ai notamment utilisé cette technique dans ce billet où j'affiche un menu déroulant à partir de template.
Chez moi il fonctionne mais on ne peut pas l'utiliser pour une install directe depuis dotclear car c'est un lien avec redirection http 302 que dotclear ne semble pas correctement gérer.
Merci de tes précisions, je vais regarder comment fonctionne Simple Website.
Le lien ne marche pas, je voulais rapatrier le pkg sur mon ordi avant de le charger dans dotclear par le gestionnaire, je l'ai fait pour d'autres plugins et des thèmes, sous DC1 depuis longtemps comme maintenant sous DC2, c'est la première fois que je tombe sur un résultat pareil, d'ailleurs le pkg ramené chez moi par "enregistrer la cible" ne s'apppelle plus "plugin-templateWidget-1.0.pkg.gz" mais "PhPMyVisites.php".
Avec quel navigateur ou quel outil de téléchargement ?
Honnêtement, le dialogue http pour ce téléchargement de fichier est tout ce qu'il y a de plus correct. Pour moi, le problème est du côté du client utilisé. En utilisant une extension Firefox telle que DownThemAll, le téléchargement du pkg.gz est tout à fait normal.
Si je rentre dans les détails techniques, le lien vers le fichier annexe est le suivant :
Il passe par phpmyvisites pour décompter le nombre de téléchargements.
Cette requête http renvoie :
Cette "location" est l'adresse réelle du package renvoyée par phpmyvisites qui a donc enregistré la visite sur le fichier.
Le client fait donc ensuite la requête :
Et le serveur renvoie :
Si cela ne fonctionne pas, je ne peux que conseiller de passer directement par l'adresse réelle du package...
Avec Firefox 2.0.0.13.
Merci pour l'explication là et sur l'autre fil, surtout que je ne connais pas grand chose aux protocoles HTTP.
Cela aurait-il à voir avec des options de sécurité qui bloqueraient des redirections?
Pourtant, il me semble que je n'ai rien de paramétré à ce sujet.