Astuces Forumactif
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Membres connectés récemment
Voir tous les membres

[PhpBB2] Vérifier valeur dans InArray (Jquery)


2 participants

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

Bipo
Bipo
https://www.develforumactif.com/

MessageBipo Jeu 8 Aoû 2019 - 13:02

  • Version du forum :
    PhpBB2
  • Templates modifiés :
    oui
  • Navigateur :
    Chrome
Bonjour x)

Je reviens une nouvelle fois vers vous... car je suis en PLS depuis quelques heures... (encore). Ma demande fait suite à la première de ce sujet.

Voici l'état actuel de mon script :

Code:
$(function() {
    if (_userdata["user_id"] > -1) {
        $.get("/profile?mode=editprofile", function(data) {
            var categorie = [];
            $(data).find('#profile_field_12_1').find('input[type="checkbox"]:checked').each(function() {
                categorie.push($(this).closest('label').text());
            });
            var reason = $("#reason").text();
            if (jQuery.inArray(reason, categorie) != -1) {
                $(".Trigger_Warning").remove();
            }
            console.log(categorie);
            console.log(reason);
        });
    }
});

En lisant deux sources jQuery.inArray et cette démo ici, je souhaite vérifier si la variable reason se trouve dans la liste categorie.

Du coup, si j'ai bien compris, la fonction InArray me permet de savoir si un élément est bien dans la tableau.

Sauf que... ça ne semble pas fonctionner... Je ne comprends pas. Je pense avoir correctement rédigé le code au regard de ces différents exemples.

Une idée de mon erreur ?

Bipo.


Dernière édition par Bipo le Ven 9 Aoû 2019 - 20:46, édité 1 fois
Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Jeu 8 Aoû 2019 - 17:29

Hello Bipo,
je ne suis pas expert et très à l'aise avec cette méthode mon ami, mais que veux tu faire exactement ,
récupérer les cases cochées et prendre le texte et l’insérer dans le profil des messages ?

Mon ami Arnaud @no_way sera mieux te répondre sur l’utilisation de ce script
Sinon, en épluchant le script et la démo

Cette ligne doit recevoir les textes il me semble:

Code:
var categorie = [];

Comme la démo:

Code:
var names = ['vadim', 'thomas', 'tanya', 'timur', 'eve', 'kate', 'karen', 'peter'];
Bipo
Bipo
https://www.develforumactif.com/

MessageBipo Jeu 8 Aoû 2019 - 21:17

Hello :)

En effet, je cherche à faire une condition sur la liste var categorie.

Même en testant une version simplifiée du script :

Code:
$(function() {
    if (_userdata["user_id"] > -1) {
        $.get("/profile?mode=editprofile", function(data) {
            var reason = [];
            $(data).find('#profile_field_12_1').find('input[type="checkbox"]:checked').each(function() {
                reason.push($(this).closest('label').text());
            });
         
          if (reason == "Sexe") {
            $(".Trigger_Warning").remove();
          } 
            console.log(reason);
        });
    }
});

La condition ne fonctionne pas.

Je pense que le problème vient du fait que je récupère .text() et non la valeur .val() du tableau...
Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Ven 9 Aoû 2019 - 4:19

Hello Bipo,

ceci veut dire si 1 est égale a 2 alors :
Code:
 
if (reason == "Sexe") {

Que représente :
Code:
$(".Trigger_Warning").remove();

Bref, si tu testes ce script:

tu récupères bien les valeurs dans la partie gauche du profil:
Code:
$(function() {
if (_userdata["user_id"] > -1) {
$.get("/profile?mode=editprofile", function(data) {
$(data).find('#profile_field_12_1').find('input[type="checkbox"]:checked').each(function() {
var texte=$(this).closest('label').text();
if (texte)
{

  $('#profile_field_12_3').closest('tr').find('td:first').append(texte);           
}
console.log(texte);
            });});
        }
    });

Bipo
Bipo
https://www.develforumactif.com/

MessageBipo Ven 9 Aoû 2019 - 13:14

Cher Milouze,

Voici une capture écran pour illustrer le principe :

[PhpBB2] Vérifier valeur dans InArray (Jquery) 09-08-10

Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Ven 9 Aoû 2019 - 15:09

Re Bipo,
Hum peux-tu me donner le code html afin que je puisse tester sur mon fofo de test phpbb2 . Ainsi que le ou les templates modifiés Je reviens en fin de journée car je suis avec Android clin oeil
Bipo
Bipo
https://www.develforumactif.com/

MessageBipo Ven 9 Aoû 2019 - 16:21

Re,

Je vais te détailler le projet. Le but de ce projet est de faire un système de trigger warning (TW) pour mon forum RPG.

Lorsqu'un membre souhaite poster un RP avec un contenu potentiellement sensible, il se doit de le signaler :

[PhpBB2] Vérifier valeur dans InArray (Jquery) 09-08-11

Après avoir coché une ou plusieurs option(s), il code est inséré dans la textarea :

[PhpBB2] Vérifier valeur dans InArray (Jquery) 09-08-12

Code:
/* CSS Trigger Warning [JS RGPD] */

.postbody .content {
    font-size: 1.3rem;
  position: relative;
    }

.Trigger_Warning{
  background: rgba(0,0,0,0.7);
  color : #FFF;
  z-index:1;
  position: absolute;
  width:100%;
  height: 100%;
  text-align: center;
  left: 0;
  vertical-align: middle;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  border-radius: 20px;
  font-size: 30px;
  line-height: 1;
}

.content label#id_TW {
  background: white;
  width: 75px;
  height: 50px;
  border-radius:10px;
  padding: 10px;
}
.content input[id^="trigger"]{display: none;}

.content input[id^="trigger"]:checked ~ :nth-child(2){display:none;opacity:0px;}

Code:
$(window).load(function() {
    var settings = {
        img: 'https://i.servimg.com/u/f38/11/01/36/00/warnin11.png',
        title: 'Avertissement public (Trigger Warning)'
    };

    $('.sceditor-group:last').after('<div class="sceditor-group"><a class="sceditor-button sceditor-button-message" title="' + settings["title"] + '"><div style="background:url(' + settings["img"] + ') no-repeat;"></div></a></div>');
    $('body').append('<div id="messageList" style="z-index:15;display:none;position:absolute;background:#fff;border:1px solid #ccc;padding:3px;"><ul id="reason" class="reasonClass"><li><label><input type="checkbox" name="reason" value="Sexe"> Sexe</label></li><li><label><input type="checkbox" name="reason" value="Sexe (violence)"> Sexe (violence)</label></li><li><label><input type="checkbox" name="reason" value="Violence (psychologique)"> Violence (psychologique)</label></li><li><label><input type="checkbox" name="reason" value="Violence (physique)"> Violence (physique)</label></li><li><label><input type="checkbox" name="reason" value="Automutilation"> Automutilation</label></li><li><label><input type="checkbox" name="reason" value="Insultes/Vulgarité">&nbsp;Insultes/Vulgarité</label></li><li><label><input type="checkbox" name="reason" value="Autre : ">Autre :</label><div style="border-style: solid;border-width: 1px 0 0;margin-top: 10px;border-color: #ebebeb;"><input type="text" id="RAinput" name="RAinput" placeholder="à préciser"/></div></li></ul><div style="border-style: solid;border-width: 1px 0 0;margin-top: 10px;border-color: #ebebeb;"><input type="button" value="Publier"></div>');

    $('.sceditor-button-message').click(function() {
        var display = $('#messageList').css('display');
        if (display == 'none') {
            var Y = $(this).offset().top;
            var X = $(this).offset().left;
            $('#messageList').show().offset({
                top: Y + 25,
                left: X
            });
        } else {
            $('#messageList').hide();
        }
    });

    $("input[type='button']").click(function() {
        var reason = [];
        var otherreason = $("#RAinput").val();
        var id_trigger = Math.floor(Math.random() * 15);
        $.each($("input[name='reason']:checked"), function() {
            reason.push($(this).val());
        });

        $('#text_editor_textarea').sceditor("instance").insertText('<!-- BALISE TW A NE PAS SUPPRIMER --><input type="checkbox" id="trigger_' + id_trigger + '" name="scales"><div class="Trigger_Warning TW_' + id_trigger + '"><br>Ce message mentionne du contenu sensible <br />' + reason.join(",  ") + otherreason + '<br /><br /><label id="id_TW" for="trigger_' + id_trigger + '">Afficher quand même</label></div><!-- FIN DE BALISE -->');
    });
});

Cela la partie fonctionnelle du système.

Maintenant, j'aimerai que le membre puisse personnaliser l'affichage ou non des TW. Par exemple, si un membre ne souhaite pas voir les TW des RP Sexe, il peut le cocher dans son profil afin que cela désactive l'option. C'est le script JS donné plus haut, sur lequel je bute...

Voilà :)

Par contre, je fais les tests sur un forum ModernBB pour ce développement.
Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Ven 9 Aoû 2019 - 17:07

Oki je regarde cela ,
donc tu butes simplement sur le profil.
Tu as donc deux choix pour l'affichage ou non du code html?:
Oui ou Non ?

Ton projet est tout de même pour la version PhppBB2?
Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Ven 9 Aoû 2019 - 17:23

Vu que ton sujet mentionné la version Phpbb2, j'ai continué mes essais sur cette dernière.

Alors , j'ai créé deux champs dans le profil Oui ou non.

La case on est cochée par défaut:

[PhpBB2] Vérifier valeur dans InArray (Jquery) 120

Ce qui donne sur le profil:

[PhpBB2] Vérifier valeur dans InArray (Jquery) 119

Puis ce script:
Code:

$(function() {
if (_userdata["user_id"] > -1) {
$.get("/profile?mode=editprofile", function(data) {
$(data).find('#profile_field_12_1').each(function(){
var oui=$(this).find('input[type="checkbox"]:first:checked').length;
var non=$(this).find('input[type="checkbox"]:last:checked').length;
if (non) {$('.Trigger_Warning').remove();}});});}});



Ou celui-ci pour supprimer aussi le bouton sur l'éditeur:
Code:
$(function() {
if (_userdata["user_id"] > -1) {
$.get("/profile?mode=editprofile", function(data) {
$(data).find('#profile_field_12_1').each(function(){
  var oui=$(this).find('input[type="checkbox"]:first:checked').length;
  var non=$(this).find('input[type="checkbox"]:last:checked').length;
if (non) {$('.Trigger_Warning,a.sceditor-button.sceditor-button-message').remove();  }});});}});

Ce dernier est fonctionnel mon ami clin oeil
Bipo
Bipo
https://www.develforumactif.com/

MessageBipo Ven 9 Aoû 2019 - 19:10

Re,

Merci pour cet avancement.

Du coup, je pense plutôt faire une liste que des checkbox afin que les membres évitent de cliquer sur Oui et Non en même temps.

J'ai donc fait une liste Oui/Non.

Je pensais réécrire le code de cette manière :

Code:
$(function() {
    if (_userdata["user_id"] > -1) {
        $.get("/profile?mode=editprofile", function(data) {
            $(data).find('#profile_field_7_1').each(function() {
                if ($('#profile_field_7_1 option[value="0"]:selected')) {
                    $('.Trigger_Warning').remove();
                }
            });
        });
    }
});

Mais visiblement, cela ne fonctionne pas. Je désespère à ne pas comprendre pourquoi cela ne fonctionne pas même en suivant x tutoriels...

Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Ven 9 Aoû 2019 - 20:06

Ok, effectivement on a plus le choix de créer des listes prédéfinies.

Code:
if ($('#profile_field_7_1 option[value="0"]:selected')) {

La tu mentionnes le choix oui  le choix non à cette valeur 1

Ce script devrait fonctionner Bipo:


Code:
$(function() {
if (_userdata["user_id"] > -1) {
$.get("/profile?mode=editprofile", function(data) {
$(data).find('#profile_field_7_1').each(function(){
var non=$(this).find('option[value="1"]:selected').length;
if(non)
{
$('.Trigger_Warning,a.sceditor-button.sceditor-button-message').remove();  
}

            });});
        }
    });
Bipo
Bipo
https://www.develforumactif.com/

MessageBipo Ven 9 Aoû 2019 - 20:46

Re,

Pourquoi je cherche toujours compliqué...

C'est parfait Milouze, je fais étudier la propriété .length.

Résolu :) Un grand merci !
Milouze14
Milouze14
Fondateur

https://www.milouze14.net/

MessageMilouze14 Sam 10 Aoû 2019 - 6:24


Hello Bipo,

de rien cher ami.


Hello


Sujet résolu et déplacé dans le forum adéquate

A bientôt pour une prochaine demande clin oeil

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

Créer un compte ou se connecter pour répondre

Vous devez être membre pour répondre.

S'enregistrer

Rejoignez notre communauté ! C'est facile !


S'enregistrer

Connexion

Vous êtes déjà membre ? Aucun soucis, cliquez ici pour vous connecter.


Connexion

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