/extension/myblog/design/myblog/stylesheets/white.css
/extension/myblog/design/myblog/stylesheets/black.css

Select your style :

A la une // Les blogs sur le développement Web, l'oenologie, Montpellier, etc...

Ajouter de jolies Smileys dans ses commentaires

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]-->
 

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)

La star du domaine que l'on trouve un peu partout à Montpellier (du moins les bons cavistes). Un vin impossible à décrire, et qui ne laisse pas indifférent, et surtout un très bon rapport qualité / originalité / prix.

Publié par : gandbox, le 02 Janvier 2009 09:14 pm

Test de Smileys

Test de smileys Smiling et un autre Wink et des trucs comme Big Eyes
Test de smileys Laughing et un autre Kiss et des trucs comme Surprising
Test de smileys Suspicious et un autre Crying et des trucs comme Smiling

Publié par : Damien, le 02 Janvier 2009 10:40 pm

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

Publié par : gandbox, le 02 Janvier 2009 11:49 pm

Corrections dans le billet

Yes, merci pour ta vigilance Smiling

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 Smiling

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 Smiling

Publié par : Guillaume Kulakowski, le 03 Janvier 2009 10:11 am

Que boire avec ce billet ?

"Que boire avec ce billet ?" -> Smiling

Publié par : gandbox, le 03 Janvier 2009 11:34 pm

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 Smiling Pour ma part, je pense que IE6 peut bien supporter un JavaScript de plus et/ou disparaître à jamais.

Publié par : Beats By Dre, le 03 Mai 2012 10:31 am

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/