Bonjour à tous 🙂
Je vous remets ici le
post publié sur le forum francophone de FluxBB
Ce bout de code vient d'une proposition d'amélioration sur mon forum de randonnée favoris ; afin de faciliter les recherches sur ce forum, un système de tags a été mis en place, par exemple un sujet traitant des matelas Therm-a-Rest Z-lite aura pour titre
[Matelas] Therm-a-Rest Z-litre. Mais il faut ajouter ces tags à la main, suivant une norme établie, ce qui peut se révéler fastidieux, tant pour les utilisateurs pas encore habitués que pour les modérateurs qui doivent passer derrière pour faire le ménage et les corrections.
L'idée proposée est simple : ajouter, dans le formulaire de création/édition de sujet, des
listes déroulantes contenant les tags utilisables pour normaliser le titre du sujet. Techniquement, puisque les deux listes sont ajoutées dans le formulaire, leurs valeurs seront
postées en même temps que le reste du formulaire, et donc manipulables via
$_POST. Marche à suivre détaillée.
Installation
Ce mod a été testé avec les versions suivantes :
+ FluxBB
1.2.22
+ Apache
2.2.14
+ Php
5.3.2
+ MySQL
5.1.41
L'installation d'un seul fichier est nécessaire, que vous pouvez
télécharger ici. Extrayez le fichier
tags.php dans votre répertoire
/include/ ; si vous voulez le mettre ailleurs, c'est possible, il faudra juste le préciser un peu plus loin.
Il faut maintenant l'éditer pour y ajouter vos tags perso. À la ligne 86 vous trouvez les deux listes qui contiennent des tags par défaut. Le format est simple, un tag est défini de la manière suivante : [Titre_du_tag], et il sera utilisé tel quel. Choisissez donc bien vos titres, car se sont eux qui seront affichés dans le titre du sujet (avec les underscores en moins) !
Ceci étant fait, il y a deux fichiers du forum qui doivent être un peu modifiés :
/post.php et
/edit.php qui gèrent respectivement la publication et l'édition des topics et posts.
Fichier edit.php
D'abord, on inclue les deux tags au début du sujet du topic. À la ligne 77, remplacez :
$subject = pun_trim($_POST['req_subject']);
par :
$subject = pun_trim($_POST['tag1']." ".$_POST['tag2']." ".$_POST['req_subject']);
Puis on fournit la nouvelle version du titre. Ligne 209, remplacez :
echo pun_htmlspecialchars(isset($_POST['req_subject']) ? $_POST['req_subject'] : $cur_post['subject'])
par :
echo pun_htmlspecialchars($subject)
Enfin, à la ligne 210, juste avant
<label><?php echo $lang_common['Message'] ?><br />
ajoutez
<?php
require_once('./include/tags.php');
$tag = new tagManager($cur_post['subject'],$_POST['tag1'],$_POST['tag2'],$cur_post['fid']);
$subject = $tag->getSubject(false);
?>
1. inclusion de la classe. Si vous n'avez pas mis
tags.php dans
/include/, c'est ici qu'il faut le préciser.
2. on créé une instance de la classe
3. on récupère le titre du sujet. Le paramètre
false indique de ne pas afficher les tags dans le titre, modifiez-le en
true si vous voulez les afficher.
Fichier post.php
Les modifications a effectuer pour
post.php sont très similaires à celles de
edit.php :
Ligne 86, remplacez :
$subject = pun_trim($_POST['req_subject']);
par :
$subject = pun_trim($_POST['tag1']." ".$_POST['tag2']." ".$_POST['req_subject']);
Ligne 492, juste avant
<label><strong><?php echo $lang_common['Subject'] ?></strong>
ajoutez :
<?php
require_once('./include/tags.php');
$tag = new tagManager($cur_post['subject'],$_POST['tag1'],$_POST['tag2'],$fid);
$subject = $tag->getSubject(false);
?>
Mêmes remarques que pour
edit.php, sauf que le 4ème paramètre de la classe est
$fid et non
$cur_post['fid']
: si on créé un nouveau post, c'est justement qu'on a pas on post courant à traiter.
Et voilà, c'est tout ! Cela devrait fonctionner 😉
Le code source tel qu'il est prévu pour le forum pour lequel j'ai développé ce mod est visible sur
mon blog. J'ai essayé de commenter au mieux le code, cela me semble assez clair, si vous avez des questions sur le fonctionnement n'hésitez pas à les poser.
Cette version ne propose que deux types de tags, mais il est tout-à-fait envisageable d'en ajouter d'autres, je le ferais surement à l'avenir. Elle présente aussi l'inconvénient de devoir systématiquement éditer le fichier principal si on voit ajouter/supprimer un tag... la prochaine version du mod corrigera ça, sans doute en passant par un fichier texte, idéalement modifiable via le panneau d'administration. Maintenant je n'utilise pas FluxBB, donc si quelqu'un voit un moyen de faire ça, qu'il se lance !
Ce mod fait aussi la distinction du forum dans lequel ce trouve le topic ; dans le cas présent, les tags que j'appelle «types» ou «spécifiques» ne seront disponibles que dans le forum d'id 11.
Les possibilités d'adaptation sont assez nombreuses, n'hésitez donc pas à réutiliser/modifier ce code à votre guise, ça tourne au
GPL 😉
En espérant que ça serve à quelqu'un, bonne fin de journée 🙂