Condition & regex ?

Résolu
a70m Messages postés 2763 Date d'inscription   Statut Contributeur Dernière intervention   -  
a70m Messages postés 2763 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis entrain de mettre en place un code balisé pour un module de rédaction d'articles sur un blog.

Exemple pour mettre en gras : [gras]Texte en gras[ /gras ] etc ... (les espaces dans la balise fermante, c'est parce que CCM n'aime pas sans ;))

Jusqu'ici, tout fonctionne comme je veux, mais je suis face à un problème car dans un soucis de confort pour les rédacteurs, j'aimerai que ce soit le plus simple possible.

Pour les images 4 possibilités :

- Une image affichée telle quelle dans sa taille réelle (et un max-width 100% pour éviter qu'elle ne dépasse le conteneur)
- Une image qu'on souhaite redimensionner
- Une image en miniature qui, lorsqu'on clique dessus, s'ouvre en grand dans une lightbox
- Plusieurs miniatures qui s'ouvrent dans une lightbox sous forme de diapo (il faut qu'elles aient un attribut html en commun)

Pour le moment, j'ai 4 balises différentes, mais je trouve que ça fait un peu beaucoup. J'aimerai pouvoir lier les 2 premiers cas et les 2 derniers, comme par exemple

[image=http://monsite.com/image.jpg:200px] là on redimensionne l'image, mais si on a [image=http://monsite.com/image.jpg] on n'affiche que l'image dans sa taille initiale

Et si en partant d'un de ces deux cas, on pouvait rajouter, si on souhaite l'ouvrir dans une lightbox un :lightbox dans la balise, ça serait le top.

Pour le diapo pas trop d'idées ..;

Sachant que tout fonctionne déjà, mais j'ai 4 regex différentes que je sais gérer, mais les rédacteurs d'articles ne s'y connaissent pas en code, c'est la raison pour laquelle je souhaite simplifier tout ça.

J'espère être assez clair, si ça n'était pas le cas, je vous apporterai les infos qu'il manque.

Cordialement
a70m

8 réponses

Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
Bonsoir,

c'est jouable avec une redirection d'url

si toutes ces images sont dans un dossier en particulier, ça facilite la chose.

par exemple si l'image est dans

/img/articlesblog/art1/image.jpg

tu fais une règle htaccess du genre :

RewriteCond %{REQUEST_URI} ^/img/articlesblog
RewriteRule ^img/articlesblog/(.+)$ img/articlesblog/img.php?1=$1 [NC,NE,QSA,L]

ensuite dans ton fichier img.php

qui se trouve dans le dossier articlesblog dans ce cas mais c'est pour l'exemple. ca dépend comme tu as fait ton truc.

tu fais :

$req = explode(':',$_GET[1]);

de là : req[0] te dit quel image afficher.

et les suivants te disent les arguments que tu as passé.

il ne te reste plus qu'a afficher l'image directement ou de la modifier en php.

Si ton site est beaucoup fréquenté il est préférable de faire un système de cache parce que php devra créer une image à chaque demande.

pour une ligthbox rien à voir. Il faut le faire en js sur un évènement.
0
a70m Messages postés 2763 Date d'inscription   Statut Contributeur Dernière intervention   217
 
Salut,

Merci de ta réponse, mais je suis pas sûr que je me sois fait correctement comprendre ...

Puisque le but recherché et de simplifier au maximum la rédaction d'un article pour les rédacteur en proposant plusieurs solutions pour afficher les images.

Cordialement
0
Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
Ah oui je viens de comprendre !

ben tant pi je t'avais fait un code pour redimensionner les images à la volé par l'url. Préviens si tu le veux que si ça peut être utilise maintenant qu'il est fait...

donc je pense que ce serait plus simple de faire

[image:200px:lightbox=http://mon/image.jpg]

j'essaie de te montrer ça mais ça fait longtemps
0
Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
voilà ceci devrait fonctionner :

<?php

function callback_replaceImage($m) {
$style = '';

$ligthbox = (!empty($m[3]))? ' onclick="return lightbox(this);"' : '';
if(!empty($ligthbox)) $style .= 'cursor: pointer;';

$style .= (!empty($m[2]))? 'max-width:'.substr($m[2],1).';max-height:'.substr($m[2],1).';' : '';
if(!empty($style)) $style = ' style="'.$style.'"';

return '<img src="'.$m[4].'" alt="image"'.$style.$ligthbox.'/>';
}

function replaceImage($string) {
return preg_replace_callback('#\[image((:[0-9]+px)?(:lightbox)?){0,2}=(.+)\]#U','callback_replaceImage',$string);
}

$string = file_get_contents('text.txt');

echo replaceImage($string);

?>

j'ai testé avec ça :

[image=http://mon/image.jpg]
[image:200px=http://mon/image.jpg]
[image:lightbox=http://mon/image.jpg]
[image:lightbox:200px=http://mon/image.jpg]
[image:200px:lightbox=http://mon/image.jpg]

perdu dans du lorem et plusieurs url et ça fonctionne (contenu de fichier text.txt)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
a70m Messages postés 2763 Date d'inscription   Statut Contributeur Dernière intervention   217
 
Merci de ton aide, il y'a de l'idée, je vais creuser tout ça un peu !

a70m
0
a70m Messages postés 2763 Date d'inscription   Statut Contributeur Dernière intervention   217
 
Petite question encore. Mon texte est stocké en "bbCode" dans ma base de données, et lorsque je l'affiche, je fais appel à ma fonction translate(); qui auparavant remplacait [image=http://mon/image.jpg] par <img src="http://mon/image.jpg alt="image /> etc etc ...

Donc quand j'affiche mon contenu depuis la base de données, les données arrivent "codées" en bbCode, et à laide de translate(), je les traduis en html à l'affichage.

Du coup ça fait que dans mon php où je déclare translate() et toutes mes balises [gras] etc, je n'arrive pas à intégrer les deux fonctions que tu as créé dans ma fonction ...

Voici un bout de mon code translate() :

function translate($messagebbc)
{
// Gras
$messagebbc=str_replace("[gras]", "<span class=\"BBC_gras\">", $messagebbc);
$messagebbc=str_replace("[/gras]", "</span>", $messagebbc);

// Image
$regImage="\[image ?= ?([^\[]*) ?\]";
$messagebbc=ereg_replace($regImage, "<img alt=\"Image\" class=\"BBC_image\" src=\"\\1\" />", $messagebbc);
 return $messagebbc;
}


Merci de ton aide
0
Atropa Messages postés 1940 Date d'inscription   Statut Membre Dernière intervention   274
 
tu les déclares avant la fonction translate et tu remplaces :
$regImage="\[image ?= ?([^\[]*) ?\]";
$messagebbc=ereg_replace($regImage, "<img alt=\"Image\" class=\"BBC_image\" src=\"\\1\" />", $messagebbc);


par

$messagebbc = replaceImage($messagebbc);


si tu veux mettre une class à la balise image tu peux modifier les fonctions pour le faire
0
a70m Messages postés 2763 Date d'inscription   Statut Contributeur Dernière intervention   217
 
Ah yes je n'y avais pas pensé à ça ! Oui pour les classes je vais encore bosser dessus, il faut que j'arrive à ajouter une partie devant et derrière la balise image quand c'est une lightbox.

Merci de ton aide.

a70m
0