Préfixe de titre selon les catégories

Voir le sujet précédent Voir le sujet suivant Aller en bas

Résolu Préfixe de titre selon les catégories

Message par Invité Lun 15 Nov 2021 - 22:37

Détails techniques

Version du forum : ModernBB
Poste occupé : Fondateur
Navigateur(s) concerné(s) : Google Chrome, Autre
Personnes concernées par le problème : Tous les utilisateurs
Problème apparu depuis : toujours
Lien du forum : https://arknights-rpg.forumsrpg.com/

Description du problème

Bien le bonsoir le FdF !
Je reviens avec une petite question sur un script pour lequel je suis bloquée, j'espère que vous saurez m'aider . Embarassed

Je suis administratrice fondatrice de mon forum RPG, la version est ModernBB.
Je cherche actuellement à ajouter un préfixe (dans un choix à menu déroulant) pour les sujets, et j'ai trouvé ce tuto suivant (https://www.milouze14.com/t26211p35-toutes-versions-ajouter-des-prefixes-devant-les-titres-des-sujets) qui répond à mes attentes... Ou presque !

En fait c'est exactement ce que je voudrais, mais j'aimerais que les préfixes soient différents selon le sous-forum choisi (ou au moins selon la catégorie). Sauf que... Je suis une bille en JS.
J'imagine que la résolution de mon problème se trouve dans le coin de :
Code:
 if (!/^\/post$/g.test(location.pathname) && $input) {
                  return false;
                }
          
Mais je ne suis pas sûre, et si c'est bien ça je ne sais pas quoi écrire comme ligne pour que ça corresponde à ce que je veux... ^^'

Merci d'avance pour le temps que vous prendrez à analyser ma demande, et à très bientôt ! <3
Anonymous

Invité
Invité


Invité a été remercié(e) par l'auteur de ce sujet.
  • 0

Résolu Re: Préfixe de titre selon les catégories

Message par Oka.mi Mar 16 Nov 2021 - 21:28

Bonjour Amaglibr,

Pour réaliser ce que vous souhaitez, nous avons besoin, dans un premier temps, d'ajouter de quoi nous permettre d'identifier le forum / sous-forum dans lequel on se trouve au moment de la création du nouveau sujet. Pour cela nous aurons besoin de modifier le template posting_body (dans Poster & Messages privés), d'une part pour ajouter la variable du nom de la catégorie et du forum (non présente par défaut sur ModernBB) ici récupérée d'un forum phpbb2, d'autre part pour indiquer un id sur la variable et ainsi pouvoir agir dessus plus facilement.
Ainsi, juste après la variable {POST_PREVIEW_BOX}, vous pouvez coller ceci :
Code:
<span class="nav"><a class="nav" href="{U_INDEX}">{L_INDEX}</a>&nbsp;<!-- BEGIN switch_not_privmsg --><span id="prefx_forum">{NAV_CAT_DESC}</span><!-- END switch_not_privmsg --></span>
Si vous ne souhaitez pas que les liens concernées apparaissent, vous pouvez appliquer un display:none sur le span class, comme ceci :
Code:
<span class="nav" style="display:none;"><a class="nav" href="{U_INDEX}">{L_INDEX}</a>&nbsp;<!-- BEGIN switch_not_privmsg --><span id="prefx_forum">{NAV_CAT_DESC}</span><!-- END switch_not_privmsg --></span>
Le JavaScript fonctionnera tout de même.

Une fois cela fait, :enreg: et n'oubliez pas de publier Préfixe de titre selon les catégories Check_10 votre template à la suite.

Maintenant, passons aux modifications à apporter au code JavaScript présent dans le tutoriel.
Voici la version du JavaScript adaptée à vos besoins, et qui permet donc de sélectionner une série de préfixes différents en fonction du forum où l'on se trouve :
Code:
if (window.location.href.indexOf('post?f=') > -1) {

   /*globals jQuery*/
   /**
    * @name Sistema de Prefixos.
    * @version 1.0
    * @author Luiz
    * @see {@link http://ajuda.forumeiros.com/}
    * @licence MIT
    */
   (function ($) {
      'use strict';

      var config = {
         prefixes0: [
            'DEFAUT 1', 'DEFAUT 2', 'DEFAUT 3', 'DEFAUT 4'
         ],

         prefixes1: [
            'TITRE 1', 'TITRE 2', 'TITRE 3', 'TITRE 4'
         ],

         prefixes2: [
            'TITRE 5', 'TITRE 6', 'TITRE 7', 'TITRE 8'
         ],

         lang: {
            all: 'Faites votre choix'
         },

         engine: {
            /**
             * @name Inicializador.
             * @desc Usado para iniciar o script.
             * @param {object} input - Corresponde ao seletor do input-alvo do script.
             */
            init: function (input) {
               var self = this;

               var $input = $(input);
               var $dummy = $('<option>', {
                  'class': 'fa-prefix-item'
               });

               if (!/^\/post$/g.test(location.pathname) && $input) {
                  return false;
               }

               var $select = $('<select>', {
                  'class': 'fa-prefix-select',
                  'title': 'PHPBB2 - PHPBB3 - PUNBB - INVISION - MODERNBB - AWESOMEBB - EDGE - TOUTES VERSIONS '
               });

               $dummy
                  .clone()
                  .text(config.lang.all)
                  .attr('value', '')
                  .attr('selected', true)
                  .appendTo($select);

               var pref;
               switch (document.getElementById("prefx_forum").lastChild.firstChild.innerHTML) {
                  case "Nom du forum 1":
                  case "Nom du forum 3":
                     pref = config.prefixes1;
                     break;

                  case "Nom du forum 2":
                     pref = config.prefixes2;
                     break;

                  default:
                     pref = config.prefixes0;
               }

               $.each(pref, function (index, prefix) {
                  $dummy
                     .clone()
                     .text('[' + prefix + ']')
                     .attr('value', '[' + prefix + ']')
                     .attr('id', 'fa-prefix-item-' + index)
                     .appendTo($select);
               });

               $select
                  .insertBefore($input)
                  .on('change', function () {
                     var $this = $(this);
                     var value = $this.val();

                     self.prefix(value, $this.next());
                  });
            },

            /**
             * @name Prefixador.
             * @desc Usada para colocar o prefixo no input.
             * @param {string} value - Corresponde ao prefixo que será colocado.
             * @param {object} input - Corresponde ao seletor do input que será prefixado.
             */
            prefix: function (value, input) {
               var $input = $(input);

               if (/^\[.*\]/g.test($input.val())) {
                  $input.val($.trim($input.val().replace(/^\[.*\]/, '')));
               }

               $input.val($.trim(value + ' ' + $input.val()));

            }
         }
      };

      $(function () {
         var $input = $('input[name="subject"]');
         config.engine.init($input);
      });
   }(jQuery));

}
Tel quel il ne fonctionnera pas, il faudra adapter cela à votre utilisation.
Décortiquons les points à modifier ensemble.

Code:
var config = {
         prefixes0: [
            'DEFAUT 1', 'DEFAUT 2', 'DEFAUT 3', 'DEFAUT 4'
         ],

         prefixes1: [
            'TITRE 1', 'TITRE 2', 'TITRE 3', 'TITRE 4'
         ],

         prefixes2: [
            'TITRE 5', 'TITRE 6', 'TITRE 7', 'TITRE 8'
         ],
Ici au lieu d'une variable prefixe, on en établit plusieurs : deux à utiliser pour deux forums distincts, et une qui servirait pour tous les forums non spécifiés dans le code JavaScript (préfixes par défaut).
Vous pouvez, ainsi, ajouter autant de sets que vous voulez, pour autant de forums que vous voulez, il suffira de créer d'autres variables à la suite, au même endroit, et d'ajouter des cas en conséquence (voir plus bas).
Il n'y a évidemment rien qui vous oblige à établir des préfixes par défaut, c'est juste pour vous montrer qu'il est possible de le faire et comment.

Code:
var pref;
               switch (document.getElementById("prefx_forum").lastChild.firstChild.innerHTML) {
                  case "Nom du forum 1":
                  case "Nom du forum 3":
                     pref = config.prefixes1;
                     break;

                  case "Nom du forum 2":
                     pref = config.prefixes2;
                     break;

                  default:
                     pref = config.prefixes0;
               }
On déclare une variable "pref" dont on précisera le contenu par la suite.
On agit sur l'id "prefx_forum" placée sur la variable contenant le nom de la catégorie et le nom du forum. On va chercher le contenu HTML du premier sous-élément du dernier sous-élément de la variable, un chemin qui nous mène vers le nom du forum.
On évoque ensuite des cas :
- si le nom du forum = "Nom du forum 1" ou "Nom du forum 3", mettre les préfixes de la variable "prefixes1"
- si le nom du forum = "Nom du forum 2", mettre les préfixes de la variable "prefixes2"
- situation par défaut, mettre les préfixes de la variable "prefixes0"

Vous devez donc remplacer les "Nom du forum 1" etc par le nom des forums où vous voulez spécifier un set de préfixes, et penser à modifier le JavaScript si vous modifiez le nom du forum concerné un jour.

Le premier cas est là juste pour montrer comment écrire le code si vous voulez établir un set de préfixes pour plusieurs forums (ici forum 1 et forum 3).

Pour finir, j'ai ajouté autour du code une condition if (window.location.href.indexOf('post?f=') > -1) { car le template posting_body gère à la fois la page de création d'un nouveau sujet, et la page de réponse à un sujet. Je suis partie du principe que la page de réponse à un sujet n'est pas concernée par les préfixes, du coup j'ai ciblé le script sur la page de création d'un sujet spécifiquement.

N'hésitez pas si vous avez des questions.
Oka.mi

Oka.mi
Aidactive
Aidactive

Messages : 2777
Inscrit(e) le : 06/01/2011

https://deus-academia.forumactif.com/
Oka.mi a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Préfixe de titre selon les catégories

Message par Invité Mar 16 Nov 2021 - 21:57

Bonsoir Oka.Mi !
Tout d'abord merci beaucoup pour cette rapidité de réponse et pour le temps que vous avez pris à me répondre ! Egalement, je tiens à vous remercier pour toutes ces explications et ces petits détails, qui m'ont permis de bien comprendre le système de ce script alors même que je ne maîtrise pas parfaitement le langage JS !

Je viens de tester à l'instant votre méthode, et franchement c'est absolument parfait !!! <3
Mille mercis vraiment !

Je note le sujet résolu de ce pas, passez une très bonne soirée ! ~
Anonymous

Invité
Invité


Invité a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum