[Résolu] Injection de texte dans un div (à l’intérieur de functions.php) avec du javascri

  • WordPress :4.7
  • Statut : résolu
6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Messages
  • #1620691
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    Bonjour,

    Ma configuration WP actuelle   WordPress 4.7.2

    • Version de PHP/MySQL : 5.6.30
    • Thème utilisé : le mien
    • Extensions en place : gravity form
    • Nom de l’hébergeur : Strato
    • Adresse du site :

    Problème(s) rencontré(s) :

    Bonjour,

    J’ai un formulaire de connexion, avec un formulaire simple de gravity form (login, mot de passe).

    Dans functions.php, j’ai ajouté les fonctions de validation pour ce formulaire.

     

    
    add_filter('gform_validation_124', 'msk_gform_user_registration_validation');
    function msk_gform_user_registration_validation($validation_result){
    	global $user;
    	
    	$form = $validation_result['form'];
    	$user_id = $user->ID;
    	$user1 = get_userdata( $user_id );
    	$user_role = array_shift($user1->roles);
    	
    	if ($user_role != 'mitglieder_partnerlieferanten'  )
    	 {
    				if ($user_role == 'mitglieder_mitglieder' ) 
    				{
    					$admission = $user->usermitglieder_admission;
    					
    				}
    				if ($user_role == 'mitglieder_partnerorganisationen' ) 
    				{
    					$admission = $user->userpartnerorga_admission;
    				}
    				
    				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
    			   if (($admission == 'ja' ) OR ($user_role == 'administrator' ))
    				{
    					$admissiontag = 0;
    				}
    				else
    				{
    				echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';
    				/*echo '<script type="text/javascript">$(document).ready(function(){ $(".validation_error").prepend("Sie sind nicht Miglieder");});</script>';*/
    				/*return '<div class="connexion-error">Sie sind nicht Miglieder.</div>';*/
    				/*echo '<script type="text/javascript">$(".validation_error").prepend("Sie sind nicht Miglieder");</script>';*/
    				}
    	}
    	else
    	{
    	/*echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden! ");</script>';*/
    	echo '<script type="text/javascript"> document.getElementById("connexionerror").innerHTML=" Sie können nur in Lieferantenbereich anmelden!"</script>';
    	
    	/*var D = document.getElementById("connexionerror");
    	D.innerHTML = "Sie können nur in Lieferantenbereich anmelden!";
    	</script>';*/
    	/*echo '<script type="text/javascript">  
        		var div = document.getElementById("connexionerror");  
        		div.textContent = "Sie können nur in Lieferantenbereich anmelden!";  
        		var text = div.textContent;  
    			</script>  ';*/
    	/* return '<div class="connexionerror">Sie können nur in Lieferantenbereich anmelden!.</div>';*/
    	}
    	$validation_result['form'] = $form;
    	return $validation_result;
    }

    J’ai des cas à respecter pour la connexion.

    Et je fais afficher des popup quand les conditions ne sont pas respectées.

    Mais j’aimerai que ces messages soient inclus directement dans la page plutôt que dans un popup.

    Du coup, j’ai créé un div vide dans la page

    <div id=”connexionerror”>  </div></br>

    où j’essai de mettre le message. En gros, j’essai de remplir ce div par du texte.

    Si $user_role est égal à ‘mitglieder_partnerlieferanten’  , et bien celui ci ne peux pas se logger et le message  “Sie können nur in Lieferantenbereich anmelden!” doit apparaître.

    J’ai essayé plein de choses (qui sont en commentaire dans le code ci dessus). j’ai essayé d’injecter du texte dans le div en utilisant du javascript.
    Mais mon div connexionerror reste toujours vide….

    Du coup, je me demande si ce n’est pas parce qu’il faut mettre le javascript à la fin du code, ce que je ne peut pas faire vu qu’il faut qu’il soit inclu dans le cas particulier…..

    Avez vous des indices? conseils pour cela ?

    merci pour votre aide

    Timama

     

     

    #1620708
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    alors, en fait j’ai abandonné mon idée d’injecté du text dans un div à l’aide de javascript.

    J’ai donc créé une autre fonction dans functions.php

     

    /* Modifie le texte de message d'erreur gravity form¨*/
    add_filter("gform_validation_message_124", "change_message", 10, 2);
    function change_message($message, $form){
    	global $user;
    	$form = $validation_result['form'];
    	$user_id = $user->ID;
    	$user1 = get_userdata( $user_id );
    	$user_role = array_shift($user1->roles);
    
    
    	if ($user_role != 'mitglieder_partnerlieferanten'  )
    	 {
    				if ($user_role == 'mitglieder_mitglieder' ) 
    				{
    					$admission = $user->usermitglieder_admission;
    					
    				}
    				if ($user_role == 'mitglieder_partnerorganisationen' ) 
    				{
    					$admission = $user->userpartnerorga_admission;
    				}
    				
    				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
    			   if (($admission == 'ja' ) OR ($user_role == 'administrator' ))
    				{
    				}
    				else
    				{
    				return '<div class="validation_error">Sie sind nicht Miglieder.</div>';	
    				}
    	}
    	else
    	{
    		return '<div class="validation_error">Sie können nur in Lieferantenbereich anmelden!.</div>';
    	}
    
    }

    cela modifie le texte d’eerreur par défaut de gravity form dans le cas où if ($user_role == ‘mitglieder_partnerlieferanten’  )

    mais la boucle

       if (($admission == 'ja' ) OR ($user_role == 'administrator' ))
    				{
    				}
    				else
    				{
    				return '<div class="validation_error">Sie sind nicht Miglieder.</div>';	
    				}

    ne fonctionne pas…..

    même quand admission ==Nein, ça se loggue et ne met pas de message d’erreur

     

    je continue à chercher

    #1620807
    Franck (fge)
    Modérateur
    Maître WordPress
    9583 contributions

    D’abord, si tu fais du JavaScript, pourquoi ne pas utiliser jQuery intégré à WordPress ?

    getElementById("connexionerror");
    [...]
    <div class="connexionerror">
    

    Je ne connais pas l’intégralité du code, mais tu fais une recherche sur un Id “connexionerror” (qui soit dit en passant me paraît bizarrement orthographié en Anglais, cela devrait être “connectionerror”) et tu envoies “connexionerror” comme une classe CSS. Il ne pourrait pas y avoir confusion à ce niveau ?

    #1620818
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    merci Franck pour ta remarque…..

     

    ah oui, il y a class qui apparaît mais c’est en comentaire…j’ai  essayé pas mal de chose..avec les classe aussi..

    mes derniers essais étaient bien avec des div comme

    echo '<script type="text/javascript"> document.getElementById("connexionerror").innerHTML=" Sie können nur in Lieferantenbereich anmelden!"</script>';

    
    
    
    bon, pour le nom, meacoulpa.... je melange toujours connexion et connection.. et comme le site est en allemand, j'aurai même du ecrire
    "VerbindungFehler" .... mais bon...
    
    que veux tu dire en disant "si tu fais du JavaScript, pourquoi ne pas utiliser jQuery" ?
    merci par avance pour ton retour
    #1620956
    Franck (fge)
    Modérateur
    Maître WordPress
    9583 contributions

    ah oui, il y a class qui apparaît mais c’est en comentaire…

    On est d’accord, sur le code cité, on s’en fout un peu (d’où ma remarque sur l’intégralité du code), cela n’empêche pas la confusion. Mais si dans ta page tu as un <div class=”connexionerror”>, tu ne peux pas l’appeler par un getElementById(“connexionerror”). Dans ta page, tu as bien un <div id=”connexionerror”> et non pas un <div class=”connexionerror”> ?

    que veux tu dire en disant “si tu fais du JavaScript, pourquoi ne pas utiliser jQuery” ?

    jQuery est un Framework JavaScript, implémenté dans WordPress de manière à optimiser le développement JavaScript, permettant notamment de le rendre indépendant du navigateur utilisé. Pour faire ce que tu veux, il suffit d’écrire :

     $("#connexionerror").text("Mon Nouveau texte dans la div")

    #1621087
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    merci Frank pour ton retour.

     

    oui j’ai bien un <div id= »connexionerror »> mais j’ia laissé tombé car cela ne fonctionnait pas…

    peut être cela est du à l’utilisation à l’interieur d’une fonctionne utilisée par gravity form.

    Du coup je suis passée par un autre chemin.

    add_filter('gform_validation_124', 'msk_gform_user_registration_validation');
    function msk_gform_user_registration_validation($validation_result){
    	global $user;
    	
    	$form = $validation_result['form'];
    	$user_id = $user->ID;
    	$user1 = get_userdata( $user_id );
    	$user_role = array_shift($user1->roles);
    	
    	if ($user_role != 'mitglieder_partnerlieferanten'  )
    	 {
    				if ($user_role == 'mitglieder_mitglieder' ) 
    				{
    					$admission = $user1->usermitglieder_admission;
    					
    				}
    				if ($user_role == 'mitglieder_partnerorganisationen' ) 
    				{
    					$admission = $user1->userpartnerorga_admission;
    				}
    				
    				// AJOUT TEST POUR SAVOIR SI LE USER EST ADMIS (ou administrato = admis direct)
    			   if (($admission == 'ja' ) OR ($user_role == 'administrator' ))
    				{
    				}
    				else
    				{
    				/*echo '<script type="text/javascript">window.alert(" Sie sind nicht Miglieder ");</script>';*/
    				foreach ($form['fields'] as &$field) {
    				$validation_result["is_valid"] = false;
    				$field["failed_validation"] = true;
    				$field["validation_message"] = "Sie sind nicht Miglieder";
    				}
    				}
    	}
    	else
    	{
    	/*echo '<script type="text/javascript">window.alert(" Sie können nur in Lieferantenbereich anmelden! ");</script>';*/
    	foreach ($form['fields'] as &$field) {
    	$field["validation_message"] = "Sie können nur in Lieferantenbereich anmelden!";
    	}
    	}
    	$validation_result['form'] = $form;
    	return $validation_result;
    }

     

    Dans la fonction de validation de gravity form, j’ai forcé l’écriture des mesages d’erreur pour mes cas en particulier.

    Je suis passée par $form[‘fields’] pour modifier le validation_result.

    Et là, cela affiche dans mon formulaire les message que je veux dans mes cas particuliers.

    Donc en fait, je n’utilise pas de javascript pour insérer du texte au final…

    merci pour ton aide Franck !

6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.