Aller au contenu
Télécharger Firefox 2

Gérer les acronymes avec preg_replace_callback et create_function

Voici un petit script sans prétention vous permettant d'afficher les acronymes que vous aurez stocké en base de donnée. En mode édition il vous faudra appliquer un BBcode sur l'expression à gérer. Une fonction se chargera de transformer le tout en code HTML valide.

La petite table qui va bien

C'est vraiment une petite table, elle ne contient qu'un champ pour stocker l'acronyme (en Primary Key) et son interprétation complète.

DROP TABLE IF EXISTS `blog_acronym`;
CREATE TABLE `blog_acronym` (
  `acronym` varchar(20) NOT NULL default '',
  `libelle` varchar(255) NOT NULL default '',
  KEY `acronym` (`acronym`)
) TYPE=MyISAM;

La fonction qui va bien

Voici une méthode extraite de la classe MiniBlog qui sert à gérer ce même blog.
// + ----------------------------------------------------------------------------------
// + makeAcronym
// + Entrée : le texte à traiter
// + Sortie : le texte traité
function makeAcronym ($texte) {
     $texte = preg_replace_callback("#\[acronym\](.+?)\[\/acronym\]#si", 
               create_function('$matches', '
                    $rq = "SELECT * FROM `blog_acronym` WHERE `acronym` = \'" . $matches[1] . "\'";
                    $acronym = mysql_fetch_object(mysql_query($rq));
                    return ($acronym->acronym) ? "<acronym title=\"" . $acronym->libelle . "\">" . $matches[1] . "</acronym>" : $matches[1];
               ')
          , $texte);
     return $texte;
}

Usage

Accédez à la notice d'utilisation ici

Pour ceux qui voudrait la table avec quelques entrées voici la Liste des acronymes utilisés sur ce Blog ;-)


Commentaires


[#1] Commentaire rédigé le Lundi 24 Janvier 2005 à 01:57 par Olivier

Pourquoi tu utilises pas un fichier texte plutôt ??
Ca serait certainement plus rapide niveau temps d'execution.

[#2] Commentaire rédigé le Lundi 24 Janvier 2005 à 01:58 par Olivier

Woups, le lien vers la liste marche pô

[#3] Commentaire rédigé le Lundi 24 Janvier 2005 à 02:04 par solo

::whistle

Merci, une erreur d'url. Sinon pourquoi une base de donnée? C'est plus simple à gérer :D

[#4] Commentaire rédigé le Lundi 24 Janvier 2005 à 07:52 par Antoine

Ouais, sympa, mais moi, j'aurais tout mis dans tableau, c'est plus rapide (quand le script de rendu est long (ce qui est mon cas :))

test : CSS et xHTML, la solution ?

[#5] Commentaire rédigé le Mardi 25 Janvier 2005 à 22:19 par Antoine

Je suis pas d'accord avec ASM... chez moi, c'est assembleur :D

[#6] Commentaire rédigé le Mercredi 26 Janvier 2005 à 13:29 par solo

Antoine> Dans ce cas là la fonctionnalité supplémentaire te sera utile ^^, car moi je garde mon ASM ;-)

[#7] Commentaire rédigé le Dimanche 06 Mars 2005 à 08:07 par Daniel

C'est sympa comme fonction.

J'aurai par contre rajouté la gestion d'erreur à la fonction de callback et du coup défini celle-ci en dehors de l'appel à preg_replace_callback() (peut-être pas pour l'exemple, mais en tout cas dans un script en production).

[#8] Commentaire rédigé le Dimanche 06 Mars 2005 à 12:16 par solo

Bonjour Daniel,

j'ai utilisé create_function car makeAcronym() fait partie de ma classe de gestion de blog. Je voulais tout encapsuler et éviter d'utiliser une fonction externe. Je n'ai en effet pas trouvé comment appeler une fonction membre en callback :o ...

L'ajout de commentaire a été désactivé pour ce billet.

Trackbacks

Pisteurs vers ce billet (trackbacks entrant)

Il n'y a pas encore de pisteurs pour ce billet.

Pistés par ce billet (trackbacks sortant)

Il n'y a pas encore de pisteurs effectué par ce billet.


A propos du billet

  • Auteur : Thanh
  • Thématique :
    Développement, PHP
  • Publié : Lundi 24 Janvier 2005 à 01h23
  • Nombre de lectures : 1796
  • Nombre de commentaires : 8
  • Ping : Les trackbacks sont fermés.
  • Tags :
Avatar de Thanh

Raccourcis

Rechercher un billet

Sous Rubriques

Photo Pif

Photopif