Ajouter de jolies Smileys dans ses commentaires
- Publié le 02 Janvier 2009
- 6 commentaire(s)
- Catégorie : Technologies Web
Généralement les systèmes de Blogs (ou sites Web 2.0) proposent d'ajouter des commentaires sur les billets ou les articles. La création de ces commentaires sont parfois en texte brut, ou parfois accompagnés d'un mini éditeur WYSIWYG, toujours assez grossier pour limiter les effets incontrôlables d'une libre contribution trop avancée. J'ai donc opté pour une transformation automatique des sauts de lignes, des liens et des Smileys.
Mécanismes par défaut
eZ Publish propose pour cela, et de façon native plusieurs opérateurs, dont :
- autolink : génération automatique des liens autour des saisies http://domaine.com
- wash : nettoyage des balises XHTML : wash(xhtml)
- break : ajout des balises XHTML de saut de ligne <br />
- wordtoimage : remplacement automatique des :) en images de Smileys.
Exemple de code :
<p>{$node.data_map.text.content|wash(xhtml)|break|wordtoimage|autolink}</p>
Problème
Ce dernier wordtoimage opérateur fait l'affaire dans la plupart des cas, mais si on est un vrai Geek, il n'est pas concevable de laisser la situation en l'état, pour plusieurs raisons :
- Les images "bleus" par défaut ne sont pas terribles, et il n'est pas évident de les redéfinir de façon élégante (le chemin vers le répertoire d'image est fixé en dur /share/icons/ dans un fichier de settings)
- Le code généré n'est pas valide (absence des ALT), et il n'est pas possible de surcharger cet aspect (le code XHTML est fixé en dur dans le code PHP de l'opérateur...)
Solution
Choisir son package
Voici la solution que j'ai appliqué pour ce site, mais il existe de nombreuses autres façon de procéder. Tout d'abord il faut choisir le package de Smileys à votre goût. Pour ma part, il s'agit d'un package Tango pour Kopete.
Créer son opérateur de template
Ensuite, il faut créer son opérateur de template, qui reprend en gros le principe très simple de wordtoimage, à savoir remplacer les textes par des images, en fonction d'un fichier de correspondance. Par contre j'y ai ajouté la gestion des ALT, et le stockage des images dans le répertoire design du siteaccess.
- Le chemin pour stocker les images est donc : extension/monextension/design/monsiteaccess/images/ezsmileys/ (voir le paramètre imagedir dans le fichier de configuration)
- Le chemin pour stocker mon opérateur de template est donc : extension/monextension/autoloads/ezsmileys.php (ne pas oublier de le déclarer dans eztemplateautoload.php, voir la documentation
- Le chemin pour stocker mes paramètres : extension/monextension/settings/ezsmileys.ini.append.php
Bien sur, il faut modifier son template de la sorte :
<p>{$node.data_map.text.content|wash(xhtml)|break|ezsmileys|autolink}</p>
Rendre le PNG transparent avec Internet Explorer
Le format PNG est idéal dans mon cas de figure, puisque l'on peut modifier le design du site, et passer du fond blanc au fond noir. Par contre Internet Explorer 6 (et 5.5) n'affichent pas la transparence des PNG, il est donc nécessaire de bricoler un peu. Ce site explique tout ce qu'il faut savoir : http://homepage.ntlworld.com/bobosola/index.htm
Cela explique l'utilisation des balises width et height dans le code XHTML produit par l'opérateur.
Résultat
| Avant (wordtoimage) | Après (ezsmileys) |
|---|---|
Extrait de code
Code de l'opérateur : /monextension/autoloads/ezsmileys.php
<?php class eZSmileys { function eZSmileys() { } function operatorList() { return array( 'ezsmileys' ); } function namedParameterPerOperator() { return true; } function namedParameterList() { return array( 'ezsmileys' => array( true )); } function modify( $tpl, $operatorName, $operatorParameters, &$rootNamespace, &$currentNamespace, &$operatorValue, &$namedParameters ) { $ini = eZINI::instance("ezsmileys.ini"); $imagedir = $ini->variable( 'eZSmileysSettings', 'imagedir' ); $replaceText = $ini->variable( 'eZSmileysSettings', 'ReplaceText' ); $replaceIcon = $ini->variable( 'eZSmileysSettings', 'ReplaceIcon' ); $replaceAlt = $ini->variable( 'eZSmileysSettings', 'ReplaceAlt' ); $imagewidth = $ini->variable( 'eZSmileysSettings', 'imagewidth' ); $imageheight = $ini->variable( 'eZSmileysSettings', 'imageheight' ); $designURI = $siteBase = eZURLOperator::eZImage( $tpl, $imagedir, $operatorName, false ); foreach( $replaceIcon as $key => $icon ) { $icons[] = '<img width="'.$imagewidth.'" height="'.$imageheight.'" alt="'. $replaceAlt[ $key ] .'" src="' . $designURI . '/' . $icon . '"/>'; } $operatorValue = str_replace( $replaceText, $icons, $operatorValue ); } } ?>
Code des paramètres : /extension/monextension/settings/ezsmileys.ini.append.php
<?php /* [eZSmileysSettings] imagedir=ezsmileys imagewidth=16 imageheight=16 ReplaceText[]=:) ReplaceIcon[]=1.png ReplaceAlt[]=Smiling ReplaceText[]=:-) ReplaceIcon[]=1.png ReplaceAlt[]=Smiling ReplaceText[]=:-( ReplaceIcon[]=2.png ReplaceAlt[]=Sad ReplaceText[]=:( ReplaceIcon[]=2.png ReplaceAlt[]=Sad ReplaceText[]=;-) ReplaceIcon[]=3.png ReplaceAlt[]=Wink ReplaceText[]=;) ReplaceIcon[]=3.png ReplaceAlt[]=Wink ReplaceText[]=8) ReplaceIcon[]=4.png ReplaceAlt[]=Big Eyes ReplaceText[]=:D ReplaceIcon[]=5.png ReplaceAlt[]=Laughing ReplaceText[]=:-D ReplaceIcon[]=5.png ReplaceAlt[]=Laughing ReplaceText[]=:'( ReplaceIcon[]=6.png ReplaceAlt[]=Crying ReplaceText[]=:-| ReplaceIcon[]=6.png ReplaceAlt[]=Crying ReplaceText[]=:| ReplaceIcon[]=7.png ReplaceAlt[]=Suspicious ReplaceText[]=:-/ ReplaceIcon[]=7.png ReplaceAlt[]=Suspicious ReplaceText[]=:-* ReplaceIcon[]=8.png ReplaceAlt[]=Kiss ReplaceText[]=:O ReplaceIcon[]=12.png ReplaceAlt[]=Surprising ReplaceText[]=:o ReplaceIcon[]=12.png ReplaceAlt[]=Surprising ReplaceText[]=:-O ReplaceIcon[]=12.png ReplaceAlt[]=Surprising ReplaceText[]=:-o ReplaceIcon[]=12.png ReplaceAlt[]=Surprising */ ?>
Inclusion du FIX pour le support du PNG dans IE6 :
<!--[if lt IE 7.]> <script defer type="text/javascript" src={'javascript/pngfix.js'|ezdesign}></script> <![endif]-->
- Tags :
- Template Operators
- PNG
- Smileys
- eZ Publish
Que boire avec ce billet ?
Hautes Terres de Comberousse - Cuvée Roucaillat - Blanc Sec 2001
| Région : | Languedoc |
| Appellation : | Coteaux du Languedoc |
| Domaine : | Hautes Terres de Comberousse |
| Couleur : | |
| Stock : | 0 |
| Notation : | |
| Prix : | 8 € |
| Commentaire(s) : | 1 Commentaire(s) |
Test de Smileys
Test de smileys
et un autre
et des trucs comme ![]()
Test de smileys
et un autre
et des trucs comme ![]()
Test de smileys
et un autre
et des trucs comme ![]()
Quelques remarques...
Yo,
Quelques remarques :
- L'attribut alt manquant est un "vieux" bug [1]
- En revanche le chemin vers le dossier des smileys est changeable dans une surcharge de wordtoimage.ini même si il est dommage qu'il ne soit pas possible de faire des surcharges par le jeu des design
- L'appel à eZURLOperator::eZImage() doit provoquer des warnings PHP par manque de paramètres
- Le chemin vers ton fichier settings n'est probablement pas /monextension/design/monsiteaccess/settings/ezsmileys.ini.append.php mais plutôt /monextension/settings/ezsmileys.ini.append.php ou à la limite /monextension/settings/siteaccess/monsiteaccess/ezsmileys.ini.append.php
- Le problème de transparence sur les vieux IE n'affecte que les PNG 24bits, il est peu probable que tu aies besoin d'autant de couleurs et de transparence alpha sur des images en 16x16; convertis les images en PNG 8 bits, ça t'évitera d'inclure un énième Javascript et en plus du gagneras en bande passante.
Sinon si tu mettais une police en chasse fixe dans les zones de code ça améliorait nettement la lisibilité.
[1] http://issues.ez.no/8064
Corrections dans le billet
Yes, merci pour ta vigilance ![]()
Concernant wordtoimage, les limites que tu évoques sont justement les motivations de l'écriture de cet opérateur ( alt, et limitations sur le "jeu des design" ).
J'ai modifié le code d'appel de eZImage, c'est désormais plus conforme à l'API, et effectivement les Warning php auraient du m'alerter (mais Sans aucun doute avait déjà commencé avec les guerres de voisinages, trop captivant...). J'ai corrigé le chemin du settings... no comment ![]()
Pour les PNG des Smileys, j'ai pris le package en l'état, mais si je peux économiser un JS, c'est pas du luxe (vu l'usage intensif sur ce Blog), je vais regarder ça de prêt ![]()
Que boire avec ce billet ?
"Que boire avec ce billet ?" -> ![]()
PNG en 8 bits
Bon je laisse tomber les PNG en 8 bits. Je n'obtient pas de résultats satisfaisant pour IE6. La transparence s'applique de façon stricte (sans alpha) et pas au bons endroits, donc il faudrait que je redessine les contours au pixel... ou que je change de package de Smileys...
Mais s'il y a des volontaires pour fournir un package de Smileys avec un lissage parfait sur FF / IE7, et une transparence sans alpha acceptable sur IE6 je prend
Pour ma part, je pense que IE6 peut bien supporter un JavaScript de plus et/ou disparaître à jamais.
Beats By Dre
Not only to write your article is very good, but very useful for me. From this article, I got a number of important and useful information.I hope to get more useful information from your article in the future.http://www.billigdrebeats.com/
