Comment changer la taille de la police des liens du contenu d'un message [Réglé]
Dans le forum, pas sur toute la plate-forme
Créations de Modules
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
J'ai changer dernièrement la taille de la police du contenu des messages dans le forum. Je m'aperçois cependant que lorsque l'on utilise le bbcode <a href=""></a>, la taille de la police demeure la même que sur les autres liens url de portail tel que défini dans global.css.
Je suis allé voir dans le bbcode.css, mais aucune mention de style pour la balise url.
Comment puis-je changer cette taille sans affecter les autres liens du site? Je sèche, je ne trouve pas.
Merci.

ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Arf, c'est moche....
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Ensuite, dans le css tu mets :
Code CSS :
.formatted_content a : { /* Tes attributs CSS */ }
Ca te conviendrait ?
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Je ne suis pas sûr de bien comprendre l'astuce...
Il faudrait donc que j'attribue cette classe css au div msg_content_container dans le template du forum et y associer la règle css que tu me cites, c'est ça?
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Il est où le parser? Dans le dossier kernel?
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Dans la méthode parse(), tu concatènes avant le div ouvrant et après le div fermant ?
Tu vois ce que je veux dire ? Je peux pas plus te donner de code exact, je suis au boulot.
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Ok, je vais me mettre le nez dedans pour voir ce que je peux faire et je te reviens.
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
je ne vois pas trop où tu veux que je mette ce div.
Il y a ça dans la méthode parse :
Code PHP :
`sU',array(&$this,'_callback_highlight_code'),$this->content);
}
if(strpos($this->content,'[[MEDIA]]')!==false)
{
$this->_process_media_insertion();
}
if(strpos($this->content,'function parse() { global $LANG; if(strpos($this->content,'[[CODE')!==false) { $this->content=preg_replace_callback('`[[CODE(?:=([A-Za-z0-9#+-]+))?(?:,(0|1)(?:,(0|1))?)?]](.+)
`sU',array(&$this,'_math_code'),$this->content);
}
import('util/url');
$this->content=Url::html_convert_root_relative2absolute($this->content,$this->path_to_root,$this->page_path);
}[[/CODE]]Ce n'est pas plutôt dans le fichier bbcode_parser.class.php que je devrais lui filer une class css?
Édité par DaaX Le 04/10/2010 à 23h45
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Oki, j'ai trouvé où je dois faire la modif.
Par contre, la question que je me demande : est-ce que je parse comme un simple tag ou comme un tag imbriqués?
EDIT : En fait, pourquoi tu veux que je mette le tout dans un div?
J'ai fait un test dans le fichier bbcode_parser.class.php.
J'ai modifié ceci :
Code PHP :
$array_preg_replace=array( .... 'url1'=>'<a class="bb_url" href="$1">$1</a>', 'url2'=>'<a class="bb_url" href="$1">$2</a>', 'url3'=>'$1<a class="bb_url" href="$2">$2</a>$3', 'url4'=>'$1<a class="bb_url" href="$2">$2</a>$3' );
où j'ai ajouté la classe class="bb_url" au tag <a>. Avec une classe css comme celle-là, ça fonctionne, je peux modifier les liens entre balises [url] et les lines nommés en dur comme je le veux :
.bb_url {
color:red;
text-decoration:underline;
}
Il y a tout de même un problème lorsque j'édite mon message : il ne parse pas une deuxième fois. Donc, si j'avais ceci au départ :
Google ou simplement http://www.google.com, il me les transforme ainsi :
<a class="bb_url" href="http://www.ccq.org">allo</a>
<a class="bb_url" href="http://www.ccq.org">http://www.ccq.org</a>
Édité par DaaX Le 08/10/2010 à 16h09
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Décidément, moi et les regex, on ne fait pas encore bon ménage.... je ne trouve pas comment faire correctement.
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
J'ai découvert pourquoi ça me faisait ce comportement. En fait, c'était tout con, il fallait seulement adapter le remplacement dans la fonction preg_replace des regex dans le fichier bbcode_unparser.class.php. Donc, à l'édition, ça fonctionne à merveille.
Est-ce que les devs veulent bien intégrer cette fonctionnalité dans le prochain patch de la version 3? À vous de voir.

Je vous laisse les détails et explique la problématique plus clairement pour ceux à qui ça intéresse.
Problématique : le style des url de la plate-forme est géré par une seule règle css située dans global.css. C'est un peu embêtant lorsque l'on veut appliquer un style différent aux url du forum, des articles, des commentaires, etc., bref partout où les liens sont conçus à l'aide de bbcode.
La solution :
1. Modifier le parser. Repérer la fonction suivante du fichier /kernel/framework/content/parser/bbcode_parser.class.php :
Code PHP :
function _parse_simple_tags()
et aller modifier la valeur des variables suivantes dans le array :
Code PHP :
$array_preg_replace=array( ... 'url1'=>'<a href="$1">$1</a>', 'url2'=>'<a href="$1">$2</a>', 'url3'=>'$1<a href="$2">$2</a>$3', 'url4'=>'$1<a href="$2">$2</a>$3'
et remplacer par :
Code PHP :
$array_preg_replace=array( ... 'url1'=>'<a class="bb_url" href="$1">$1</a>', 'url2'=>'<a class="bb_url" href="$1">$2</a>', 'url3'=>'$1<a class="bb_url" href="$2">$2</a>$3', 'url4'=>'$1<a class="bb_url" href="$2">$2</a>$3'
et ajouter cette règle css dans votre fichier bbcode.css :
Code CSS :
.bb_url { ... ajouter les styles que vous voulez }
2. Évidemment, pour que le tout fonctionne correctement, il faut aussi modifier le unparser : /kernel/framework/content/parser/bbcode_unparser.class.php :
Code PHP :
function _unparse_simple_tags()
et aller modifier la valeur des variables suivantes dans le array :
Code PHP :
$array_preg=array( ... '`<a href="([^"]+)">(.*)</a>`isU' ...
et remplacer par :
Code PHP :
$array_preg=array( ... '`<a class="bb_url" href="([^"]+)">(.*)</a>`isU' ...
Vous pouvez dès lors appliquer des styles différents aux liens url générés par bbcode.
Voili voilou.
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
La solution que je t'avais indiquée permettait de conserver la rétrocompatiblité en s'appuyant uniquement sur du CSS, sans modifier le parser. Seulement je n'ai pas pu répondre à tes questions en raison de mes difficultés à accéder à Internet.
Voilà le code à mettre. A la dernière ligne de la méthode parse de la classe ContentSecondParser, il faut ajouter ceci :
Code PHP :
$this->content = '<div class="formatted_content">' . $this->content . '</div>';
Puis dans ton CSS, tu mets :
Code CSS :
.formatted_content a { color: black; }
Avec cette solution, tu peux modifier l'apparence de n'importe quelle balise sans modifier le parser et sans briser la rétrocompatibilité.
Voilà, désolé de ne pas avoir répondu avant. J'ajoute que je n'ai pas testé le code que j'ai fourni, le principe fonctionne, c'est sûr, mais j'ai peut-être fait une bêtise en l'écrivant.
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Ne soit pas désolé, je comprends. Un grand merci d'être passé par là, je n'avais pas compris l'aspect rétrocompatibilité.
C'est génial cette solution.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie