Extension pour Dotclear 2 : créer un widget à l'aide d'un simple fichier template html
Par Oaz, 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.
Bonjour.
je m'interesse à votre plugin car je ne connais rien au Php...
J'ai bien réussi à bidouiller quelques petits trucs dans du code DC existant mais c'est tout !
Dernièrement j'ai fait une page template .html me permettant d'afficher les billets (d'un tag donné) avec une certaine présentation. Mais je ne sais pas comment l'invoquer...
Votre plugin me permets t'il de creer facilement un widget qui afficherais mon template ?
Tres cordialement.
Il me faudrait quelques précisions pour répondre avec exactitude.
Bonjour,je suis intéressé par le widget Mini, mais je suis nul à ce jeu là. J'avais le widget "Bonjour", qui affichait un message de bienvenue personnalisé à chaque visiteur, mais une fois que j'ai fait la mise à jour de dotclear2, il ne marche plus.
J'ai téléchargé le plugin templateWidget, et installé avec mon client FTP. Il se retrouve bien dans la page de gestion des extensions, mais je ne le trouve pas dans les widgets de présentation...
Jose,
Je n'ai pas bien saisi ta question. Je ne suis pas sûr que le plugin template Widget corresponde à ton besoin.
Ce plugin permet de définir des widgets mais pour cela il faut créer le ficheir .html correspondant à chaque type de widget.
Je veux juste créer un widget comme l'exemple Mini, qui accueille le visiteur, et le reconnaît à chaque visite en affichant son nom...mais je ne suis pas très doué.
Merci d'avoir répondu
José,
Ah ok ! J'ai compris.
Le plugin templateWidget tout seul n'est pas capable de faire ça car, à ma connaissance, Dotclear 2 n'intègre pas de système pour identifier les visiteurs (et je ne connais pas de plugin qui fournisse une telle fonctionnalité).
J'en avais pourtant un plugin "Bonjour" à cette adresse: http://plugins-dotclear.geeek.org/
(lien mort aujourd'hui) et ça marchait impeccable avec dotclear2 (version béta), j'ai fait récemment une mise à jour à la dernière version de dotclear2 et là le plugin ne marche plus. Je peux te fournir le package du plugin (introuvable aujourd'hui), si tu veux l'étudier et éventuellement le développer...
Il fonctionne avec quelques bugs, tu peux le voir dans mon site
José,
En fait, après une recherche rapide, il existe un petit système d'identification des visiteurs via la case "se souvenir de moi" dans les commentaires.
Donc, essaie de créer un fichier 'bonjour.widget.html' avec le contenu suivant :
Et met ce fichier 'bonjour.widget.html' dans le dossier 'tpl' de ton thème ou du thème par défaut.
Tu devrais alors voir apparaitre un widget 'Bonjour' qui affiche le nom du visiteur. A condition, bien sûr, que le visiteur ait déjà laissé un commentaire sur le blog et ait coché la case "se souvenir de moi".
Je donne toutes ces infos sans avoir fait moi-même la moindre vérification mais j'ai confiance !
Je viens de faire comme indiqué, mais je ne vois rien.
J'ai viré l'ancien widget, j'ai crée le fichier comme tu dis et placé dans le dossier tpl de mon thème et du thème par défaut, mais je n'ai pas de widget Bonjour affiché
José,
J'ai fait quelques essais avec la version actuelle du plugin et en fait il n'y a pas possibilité de récupérer le visiteur enregistré. Du coup j'ai fait évoluer le plugin. J'ai une version 1.2 qui semble fonctionner. Le package est ici.
Je ferai un billet plus détaillé sur le sujet dès que j'en aurai le temps.
Merci, ça a l'air de fonctionner.
Un petit bémol: dans la partie commentaires, pour le visiteur enregistré, dans la case "Nom ou pseudo" il m'affiche ceci:
a:3:{s:4:"name";s:4:"JOSE";s:4:"mail";s:0:"";s:4:"site";s:0:"";}
au lieu du JOSE enregistré.
Si je change par JOSE, ça ne marche plus, si je laisse tel quel ça fonctionne...
L'important c'est que ça marche ;)
Merci, je reviendrai voir s'il y a d'autres nouvelles...
Bizarre. Je n'arrive pas à reproduire ce comportement. Chez moi l'affichage est ok.
Va falloir que je creuse la question...
J'ai un autre problème: personne peut mettre des commentaires chez moi!!! Même moi!
J'ai posté une nouvelle version. Elle est là.