THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Dans le site je n'utilise pas de compte client et donc pas de connexion client, comme je le dis j'utilise Thelia comme un catalogue, pas de e-commerce et pas de compte client.

Apparemment tu utilises le template 1.5.3.4 pour les tests mais j'utilise celui de la 1.5.2… y a-t-il une incidence ?

La div conteneur doit s'ouvrir dans l'entête pas dans index, elle doit pousser tout le contenu vers le bas y compris les menus déjà présents dans l'entête.

J'ai bien du mal à comprendre tout ça, si la cause du non fonctionnement du code est que la page contient que le formulaire alors pourquoi ne pas faire une page normale mais cibler que la div du formulaire en jquery, j'ai vu que c'était possible mais je ne saurai le faire.

Je vais essayer ta solution, si j'arrive à trouver les bons endroit où mettre les div, puisque je n'utilise pas les même pages que toi.

Je te remercie pour le temps passé sur mon problème et si ce n'était par respect pour ton implication et ton travail, je crois que je laisserais tomber, il faut dire que depuis que j'essaie de faire ce truc j'ai les nerfs à vifs, je me dis qu'il y a certainement un solution et je suis plutôt quelqu'un de tenace qui n'aime pas laisser tomber… en même temps j'ai bien peur de te faire un peu cric avec ce truc, alors si de ton coté tu en as marre, je comprendrais et n'hésite pas à me dire de me tourner vers une autre solution.


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Ce n'était qu'un exemple...
Suffit de remplacer connexion.html par contact.html...
Le placement des divs dans ta page importe peu.

1.5.3.4, 1.5.2, 0.1.0,... ça change rien...


Aide les autres, ils t'aideront en retour.

Offline


bon alors, j'ai le formulaire dans la div, houfffffffffffffff… je n'ai que copié collé ton js dans le meta et ajouté une div contenu dans contact.

Mais, ben oui, il ne fonctionne pas, à l'envoie il est écrit dans la div traitement en cours… mais le mail ne part pas.

voilà mes pages :

en fin de page meta.html (j'ai enlevée les alerts)

<script type="text/javascript">
	// <![CDATA[
	$(document).ready(function(){
		$('#mes_formulaires a').click(function(){
			var url=$(this).attr('href');
			
			$('#mon_formulaire').html("Chargement en cours...").slideDown(500);
			$.post(url, function(result){
				
				afficheForm(result);
			});
			return false;
		});
		function afficheForm(result){
			
			var mon_formulaire = $(result).find('#mon_formulaire');
			
			$('#mon_formulaire').html(mon_formulaire);
			$('#mon_formulaire form').submit(function() {
				$('#mon_formulaire').html("Traitement en cours...");
				$.ajax({
					url: $(this).attr('action'), // le nom du fichier indiqué dans le formulaire
					type: $(this).attr('method'), // la méthode indiquée dans le formulaire (get ou post)
					data: $(this).serialize(), // je sérialise les données
					success: function(result) { // je récupère la réponse du fichier
						afficheForm(result); // j'affiche la réponse
					}
				});
				return false; // j'empêche le navigateur de soumettre lui-même le formulaire
			});
			//si tu as un bouton pour fermer le formulaire :
			$('#mon_formulaire .fermer').click(function() {
				$('#mon_formulaire').slideUp(400,function(){
					$(this).html('');
				});
			});
		}
	});
	// ]]>
	</script>

menu_top.html (le bouton fermer ne fonctionne pas)

<div id="mes_formulaires">
<ul class="nav">
			<li class="MenuF"><a href="index.php?fond=contact">Contact</a></li>
			<li class="MenuF"><a href="index.php?fond=demandeBrochure">Demande de brochure</a></li>
</ul>	
</div>

<div id="mon_formulaire" class="loading">

<span class="fermer">Femer</span>
</div>

contact.html (pour le moment la page demande de brochure est la même)

<div id="contenu">
          <div id="mon_formulaire">
              <FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" urlsucces="#URLFOND(contactok,contactok=1)" method="post" class="formulaire" id="contact">
            #ERREUR_SAISIE[<div class="form-erreur message-erreur"><span class="etoile">Merci d'indiquer les informations indispensables !</span></div>]
              <div class="formline">
                <label class="infos-obligatoire"><span class="rouge">Informations indispensables</span> <span class="etoile">*</span></label>
              </div>
              <div class="formline">
                <label class="#NOM[erreur]" for="nom">Votre Nom Prénom <span class="etoile">*</span> :</label>
                <input #NOM[class="erreur"] type="text" name="nom|o" id="nom" value="#NOM" size="50" />
              </div>
              <div class="formline">
                <label class="#EMAIL[erreur]" class="obligatoire" for="email">Votre adresse E-mail <span class="etoile">*</span> :</label>
                <input #EMAIL[class="erreur"] type="text" name="email|o|email|Adresse e-mail" id="email" value="#EMAIL" size="80" />
              </div>
              <div class="formline">
                <label class="#TELEPHONE[erreur]" for="telephone">Téléphone :</label>
                <input #TELEPHONE[class="erreur"] type="text" name="telephone|f||Téléphone" id="telephone" value="#TELEPHONE" />
              </div>
              <div class="formline">
                <label class="#MESSAGE[erreur]" for="message">Vos commentaires, suggestions ou questions <span class="etoile">*</span></label><br />
                <textarea #MESSAGE[class="erreur"] rows="8" cols="80" name="message|o||Message" id="message">#MESSAGE</textarea>
              </div>
              <div class="formline">
                <label for="code">Pour la lutte anti-robot, saisissez le code ci-dessous pour valider votre message <span class="etoile">*</span></label>
                  <!-- Changer d'image à la volée si elle est illisible  -->
                <ul>
                  <li>Vous voulez changer ce code, cliquez :<a style="cursor:pointer" onclick="document.images.captcha.src='#CODE_URL_CHANGER_IMAGE'"> <strong class="rouge">> ICI <</strong></a></li>
                  <li><img src="#CODE_URL_IMAGE" alt="Captcha" id="captcha" /></li>
                  <li><input type="text" id="code" class="#CODE[form-erreur]" name="code|o|captcha" /></li>
                </ul>
              </div>
              <div class="formline">
                <p>&#160;</p>
                <button type="submit">Envoyer</button>
              </div>
          </FORMULAIRE_contact>
        </div>
</div>

Je ne sais pas ce qui bloque le traitement et l'envoie du mail ?


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


j'ai testé le formulaire hors js et donc du conteneur, le mail est bien envoyé.

J'ai remarqué que si je mets

<TEST_form_ok variable="#ENV{contactok,0}" test="egal" valeur="1">

            	<p>Merci !</p>
            	<p>Votre message à été transmis à notre équipe,
            	qui prendra contact avec vous dans les plus brefs délais.</p>

</TEST_form_ok>

Le formulaire ne s'affiche plus, en fait le problème précédent (chargement en cours…) venait de là et de la div contenu manquante, depuis j'ai supprimée cette boucle test et le formulaire est affiché mais ne fonctionne toujours pas. Manifestement y a un problème avec la boucle Test.

Du coup, je n'ai plus la possibilité d'afficher les messages de réussite ou pas d'envoi du formulaire.

Last edited by neofarm (28-04-2013 02:33:29)


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


url: '?fond=contact', // le nom du fichier indiqué dans le formulaire

au lieu de

url: $(this).attr('action'), // le nom du fichier indiqué dans le formulaire

ou plus logique et plus propre (car le plugin est... pas si bien foutu que ça...)

Dans Formesmagiques.class.php

Ligne 238 ajouter

$url = lireTag($args, "url");

Ligne 285 remplacer par

$texte  = '<form name="'.$nom.'" action="'.$url.'";

Et dans ton code html :

<FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" url="#URLFOND(contact)" urlsucces="#URLFOND(contact,contactok=1)" method="post" class="formulaire" id="contact">

Last edited by Elyos (28-04-2013 02:15:18)


Aide les autres, ils t'aideront en retour.

Offline


si je modifie le plugin comme tu le dis j'ai une page blanche (ça vient de cette ligne $texte  = '<form name="'.$nom.'" action="'.$url.'";).

Il faut enlever un ' : $texte  = '<form name="'.$nom.'" action="'.$url.'" ';, je teste ça…

Bon j'ai fait les modifs du plugin et je n'ai toujours pas de mail envoyé

Du nouveau, mon test précédent j'avais oublié de remettre "action", le mail est apparemment envoyé mais dans la div il y a toujours écrit"traitement en cours…"


J'ai toujours le même problème impossible d'ajouter la boucle "Test" en début du formulaire.

Si je comprend bien je dois pour les autres formulaires modifier url="#URLFOND(contact)" par exemple pour le formulaire de demande de brochure url="#URLFOND(demandeBrochure)", j'ai bon ?

Le champ fichier (joindre un fichier) du plugin formulaires magiques ne fonctionne pas dans le conteneur, par contre les autres champs fonctionnent.

Dans les formulaires affichés dans la div "mon_formulaire" les champs existent mais il sont invisible à l'œil (le pourtour n'est pas indiqué), je ne vois pas pourquoi, surtout qu'il y en a un qui lui est normal, celui là "Vos commentaires, suggestions ou questions *", mais les autres sont invisible, allez savoir pourquoi ! une idée ?

Edit : le problème de bouton "fermer" est résolu. J'ai ajouter un div dans la page du formulaire : <div><a href="#"  class="close">Fermer</a></div> ça fonctionne pour ce point là…

Last edited by neofarm (28-04-2013 05:02:41)


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Elyos wrote:

Ligne 285 remplacer par
$texte  = '<form name="'.$nom.'" action="'.$url.'"';


Aide les autres, ils t'aideront en retour.

Offline


neofarm wrote:

Si je comprend bien je dois pour les autres formulaires modifier url="#URLFOND(contact)" par exemple pour le formulaire de demande de brochure url="#URLFOND(demandeBrochure)", j'ai bon ?

oui

neofarm wrote:

Le champ fichier (joindre un fichier) du plugin formulaires magiques ne fonctionne pas dans le conteneur, par contre les autres champs fonctionnent.

quand tu regardes le code source du formulaire, est-ce qu'il a enctype="multipart/form-data" ?

neofarm wrote:

Dans les formulaires affichés dans la div "mon_formulaire" les champs existent mais il sont invisible à l'œil (le pourtour n'est pas indiqué), je ne vois pas pourquoi, surtout qu'il y en a un qui lui est normal, celui là "Vos commentaires, suggestions ou questions *", mais les autres sont invisible, allez savoir pourquoi ! une idée ?

css

neofarm wrote:

Edit : le problème de bouton "fermer" est résolu. J'ai ajouter un div dans la page du formulaire : <div><a href="#"  class="close">Fermer</a></div> ça fonctionne pour ce point là…

wink


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

quand tu regardes le code source du formulaire, est-ce qu'il a enctype="multipart/form-data" ?

J'ai remis "alert('afficheForm : '+result);" permettant d'afficher le code du formulaire et voilà ce qui est affiché pour le champ fichier

<div class="formline">
<label for="message">Fichier</label>
<input type="file" name="fic" />
</div>

donc pas de enctype="multipart/form-data" à première vu

Edit : Je viens de regarder sur un autre site qui utilise le plugin formulaires magiques avec l'upload de fichier qui fonctionne très bien, c'est exactement la même chose, donc apparemment normal. Enfin, on ne peut pas cliquer sur le nom du fichier joint dans le mail, alors qu'il me semble bien que c'était possible avec la première version du plugin…


Pour les champs auxquels il manque le cadre autour, aucun css pour le moment n'est appliqué… peut être veux-tu me dire qu'il faut que j'utilise du css pour gérer l'affichage du cadre autour des champs ?

Mais cela ne me dit pas pourquoi tous les champs de type text ont perdu leur cadre ? Les autres champs ont le design standard des formulaires, bizarre !

Comment faire en sorte que le message de réussite d'envoi du mail soit afficher dans la div, vu que je ne peux pas mettre la boucle test, ça fait tout planter ?

Last edited by neofarm (28-04-2013 23:04:37)


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


neofarm wrote:

Pour les champs auxquels il manque le cadre autour, aucun css pour le moment n'est appliqué… peut être veux-tu me dire qu'il faut que j'utilise du css pour gérer l'affichage du cadre autour des champs ?

Mais cela ne me dit pas pourquoi tous les champs de type text ont perdu leur cadre ? Les autres champs ont le design standard des formulaires, bizarre !

ça dépend de l'endroit où tu places ta div "mon_formulaire" de récupération et donc des css appliquées.

css thélia wrote:

#header #moteurDeRecherche form input[type="text"] {
    background-color: white;
    border: none;
    color: #5E5E5E;
    font-size: 1em;
    height: 1em;
    padding: .3em;
    width: 55%;
}

Ligne 233 remplacer par

$formtags = array('titre', 'traitement', 'urlsucces', 'url');

(pour éviter d'avoir "url" dans la balise form qui sert à rien)

Pour tes balises test, mettre :
<FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" urlsucces="#URLFOND(contact,contactok=1)" url="#URLFOND(contact)" method="post" class="formulaire" id="contact">

et non #URLFOND(contactok,contactok=1) sauf si tu veux appeler le template contactok.html

Du coup j'obtiens bien le retour "ok".

Pour le enctype="multipart/form-data" il y ait, je viens de vérifier (dans la balise form).
En mettant

              <div class="formline">
                <label class="#FICHIER[erreur]" for="fichier">Fichier :</label>
                <input #FICHIER[class="erreur"] type="file" name="fichier|f|fichier|Fichier" id="fichier" value="" />
              </div>

Last edited by Elyos (29-04-2013 12:26:31)


Aide les autres, ils t'aideront en retour.

Offline


Merci Elyos, je vais tester cela (et je te dis quoi, oups ça va pas plaire ça, lol) !

Par contre pour

Elyos wrote:

Ligne 233 remplacer par

$formtags = array('titre', 'traitement', 'urlsucces', 'url');

(pour éviter d'avoir "url" dans la balise form qui sert à rien)

Je pense que c'est dans le plugin formulaires magiques que je dois remplacer la ligne ?
Faut-il alors supprimer url="#URLFOND(contact)" du formulaire ?

Désolé pour la réponse tardive mais je devais intervenir sur un autre site…

Last edited by neofarm (02-05-2013 03:46:10)


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Oui c'est la classe du plugin qu'il faut faire la modification.

Non non tu gardes url="..."


Aide les autres, ils t'aideront en retour.

Offline


alors j'ai fait les modifications ci-dessous, mais sans résultat positif.

Elyos wrote:

Pour tes balises test, mettre :
<FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" urlsucces="#URLFOND(contact,contactok=1)" url="#URLFOND(contact)" method="post" class="formulaire" id="contact">

et non #URLFOND(contactok,contactok=1) sauf si tu veux appeler le template contactok.html

Du coup j'obtiens bien le retour "ok".

Je n'ai toujours rien qui indique à la personne ayant rempli le formulaire que sont mail est bien partie, en effet, je ne peux pas ajouter la boucle

<TEST_form_ok variable="#ENV{contactok,0}" test="egal" valeur="1">
<p>Merci !</p>
<p>Votre message à été transmis à notre équipe,
qui prendra contact avec vous dans les plus brefs délais.</p>
</TEST_form_ok>

si je l'ajoute, le formulaire de s'affiche plus dans la div conteneur mais le texte "Chargement en cours..." reste afficher sans suite…

Si crée une page contactok.html avec urlsucces="#URLFOND(contactok)"cela ne fonctionne pas mieux, j'ai rien du tout.
Si je met comme tu dis après envoie je retourne sur le formulaire de contact vide, sans aucun message.

Je ne vois pas comment faire pour qu'une fois le formulaire envoyé soit affiché le genre de texte :

Votre message à été transmis à notre équipe,
qui prendra contact avec vous dans les plus brefs délais.


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Bon... Je sais pas ce que tu fais mais moi ça m'a pris 10 min à mettre ce système en place... (+corrections du plugin)


Aide les autres, ils t'aideront en retour.

Offline


ben… je fais ce que tu me dis, rien d'autre ! Mais ça ne fonctionne apparemment pas comme chez toi.

Tu peux mettre la boucle TEST sans que ça plante tout ?

Moi si je l'ajoute au formulaire je n'ai plus le formulaire dans le div "mon_formulaire" je n'ai plus que "chargement en cours…".

Je ne sais pas ce qui cloche, peut être encore une histoire de <div id=contenu> qui n'est pas présente dans la boucle test ?
Je vais ajouter le div contenu pour voir…

Edit : bon ça n'a rien à voir avec le div contenu, mes tests ne sont pas concluants.

Edit 2:

Voilà mon code de la page contact.html (elle fonctionne sans la boucle test et ne fonctionne plus avec cette même boucle) :

<div id="contenu">
          <div id="mon_formulaire">
              <TEST_formulaire_ok variable="#ENV{contactok,0}" test="egal" valeur="1">
                  <p>Merci !</p>
                      <p>Votre message à été transmis à notre équipe,
                         qui prendra contact avec vous dans les plus brefs délais.</p>
              </TEST_formulaire_ok>
            
              <FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" url="#URLFOND(contact)" urlsucces="#URLFOND(contact,contactok=1)" method="post" class="formulaire" id="contact">
              #ERREUR_SAISIE[<div class="form-erreur message-erreur"><span class="etoile">Merci d'indiquer les informations indispensables !</span></div>]
              
            <div class="gauche"><fieldset>
              <legend>Nom et adresse</legend>
                            
               <div class="formline">
                <label class="#NOM[erreur]" for="nom">Votre Nom Prénom <span class="etoile">*</span> :</label>
                <input #NOM[class="erreur"] type="text" name="nom|o" id="nom" value="#NOM" size="50" />
               </div>
              
               <div class="formline">
                <label class="#EMAIL[erreur]" class="obligatoire" for="email">Votre adresse E-mail <span class="etoile">*</span> :</label>
                <input #EMAIL[class="erreur"] type="text" name="email|o|email|Adresse e-mail" id="email" value="#EMAIL" size="80" />
               </div>
              
               <div class="formline">
                <label class="#TELEPHONE[erreur]" for="telephone">Téléphone :</label>
                <input #TELEPHONE[class="erreur"] type="text" name="telephone|f||Téléphone" id="telephone" value="#TELEPHONE" />
               </div>
              
               <div class="formline">
						<label for="message">Fichier</label>
						<input type="file" name="fic|f|fichier|Fichier joint"/>
			   </div>
             </fieldset></div><!-- .gauche -->
              
             <div class="droite"><fieldset>
              <legend>Votre demande</legend>
              <div class="formline">
                <label class="#MESSAGE[erreur]" for="message">Commentaires, suggestions ou questions <span class="etoile">*</span></label><br />
                <textarea #MESSAGE[class="erreur"] rows="8" cols="80" name="message|o||Message" id="message">#MESSAGE</textarea>
              </div>
             </fieldset></div><!-- .droite -->
             
              <div class="formline">
                <label for="code">Pour la lutte anti-robot, saisissez le code ci-dessous pour valider votre message <span class="etoile">*</span></label>
                  <!-- Changer d'image à la volée si elle est illisible  -->
                <ul>
                  <li><a style="cursor:pointer" onclick="document.images.captcha.src='#CODE_URL_CHANGER_IMAGE'"> Changer ce code</a></li>
                  <li><img src="#CODE_URL_IMAGE" alt="Captcha" id="captcha" /></li>
                  <li><input type="text" id="code" class="#CODE[form-erreur]" name="code|o|captcha" /></li>
                </ul>
              </div>
              
              <div class="formline">
                <button type="submit">Envoyer</button>
              </div>
              
          </FORMULAIRE_contact>
          <div class="formlineClose"><a href=""  class="close">Fermer le formulaire</a></div>
        </div>
</div>

Si tu vois quelque chose qui cloche !

Je précise que j'ai bien fais les modifs que tu dis  :

Elyos wrote:

Ligne 233 remplacer par

$formtags = array('titre', 'traitement', 'urlsucces', 'url');

(pour éviter d'avoir "url" dans la balise form qui sert à rien)

Pour tes balises test, mettre :
<FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" urlsucces="#URLFOND(contact,contactok=1)" url="#URLFOND(contact)" method="post" class="formulaire" id="contact">

Last edited by neofarm (03-05-2013 18:51:14)


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Me voilà encore avec le retour ok du formulaire…

Malgré toutes mes tentatives, je n'arrive toujours pas à afficher la phrase "Votre message à été transmis à notre équipe, qui prendra contact avec vous dans les plus brefs délais." après l'envoie réussi du formulaire. Soit je retourne au formulaire contact vide et ouvert (pas de boucle test) soit le formulaire ne s'affiche plus du tout (avec boucle test). Et sans cette boucle test apparemment pas de message de réussite d'envoi.

Je ne sais plus quoi faire, pourtant je fais exactement ce que tu me dis Elyos et chez toi ça marche pas pas chez moi.

Tu as cette fameuse boucle

<TEST_formulaire_ok variable="#ENV{contactok,0}" test="egal" valeur="1">
                  <p>Merci !</p>
                      <p>Votre message à été transmis à notre équipe,
                         qui prendra contact avec vous dans les plus brefs délais.</p>
</TEST_formulaire_ok>

dans ton formulaire pour tes tests ?

Et si non comment affiches-tu le retour ok alors ?
Si oui peux-tu stp me montrer le code de ta page contact ?

Merci…


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


en_tete.html, ajout de

<div id="mes_formulaires"><a href="#URLFOND(contact)">Contact</a></div>

meta.html, ajout de

	<script type="text/javascript">
	// <![CDATA[
	$(document).ready(function(){
		$('#mes_formulaires a').click(function(){
			var url=$(this).attr('href');
			
			$('#mon_formulaire').html("Chargement en cours...").slideDown(500);
			$.post(url, function(result){
				
				afficheForm(result);
			});
			return false;
		});
		function afficheForm(result){
			
			var mon_formulaire = $(result).find('#mon_formulaire');
			
			$('#mon_formulaire').html(mon_formulaire);
			$('#mon_formulaire form').submit(function() {
				$('#mon_formulaire').html("Traitement en cours...");
				$.ajax({
					url: $(this).attr('action'), // le nom du fichier indiqué dans le formulaire
					type: $(this).attr('method'), // la méthode indiquée dans le formulaire (get ou post)
					data: $(this).serialize(), // je sérialise les données
					success: function(result) { // je récupère la réponse du fichier
						afficheForm(result); // j'affiche la réponse
					}
				});
				return false; // j'empêche le navigateur de soumettre lui-même le formulaire
			});
			//si tu as un bouton pour fermer le formulaire :
			$('#mon_formulaire .fermer').click(function() {
				$('#mon_formulaire').slideUp(400,function(){
					$(this).html('');
				});
			});
		}
	});
	// ]]>
	</script>

menu.html, ajout de

<div id="mon_formulaire"></div>

contact.html

<div id="contenu">
          <div id="mon_formulaire">
			<TEST_form_ok variable="#ENV{contactok,0}" test="egal" valeur="1">

            	<p>Merci !</p>
            	<p>Votre message a été transmis à notre équipe,
            	qui prendra contact avec vous dans les plus brefs délais.</p>

			</TEST_form_ok>
              <FORMULAIRE_contact titre="Formulaire de contact" traitement="email:#VARIABLE(emailcontact)" urlsucces="#URLFOND(contact,contactok=1)" url="#URLFOND(contact)" method="post" class="formulaire" id="contact">
            #ERREUR_SAISIE[<div class="form-erreur message-erreur"><span class="etoile">Merci d'indiquer les informations indispensables !</span></div>]
              <div class="formline">
                <label class="infos-obligatoire"><span class="rouge">Informations indispensables</span> <span class="etoile">*</span></label>
              </div>
              <div class="formline">
                <label class="#NOM[erreur]" for="nom">Votre Nom Prénom <span class="etoile">*</span> :</label>
                <input #NOM[class="erreur"] type="text" name="nom|o" id="nom" value="#NOM" size="50" />
              </div>
              <div class="formline">
                <label class="#EMAIL[erreur]" class="obligatoire" for="email">Votre adresse E-mail <span class="etoile">*</span> :</label>
                <input #EMAIL[class="erreur"] type="text" name="email|o|email|Adresse e-mail" id="email" value="#EMAIL" size="80" />
              </div>
              <div class="formline">
                <label class="#TELEPHONE[erreur]" for="telephone">Téléphone :</label>
                <input #TELEPHONE[class="erreur"] type="text" name="telephone|f||Téléphone" id="telephone" value="#TELEPHONE" />
              </div>
			   <div class="formline">
                <label class="#FICHIER[erreur]" for="fichier">Fichier :</label>
                <input #FICHIER[class="erreur"] type="file" name="fichier|f|fichier|Fichier" id="fichier" value="#FICHIER" />
              </div>
              <div class="formline">
                <label class="#MESSAGE[erreur]" for="message">Vos commentaires, suggestions ou questions <span class="etoile">*</span></label><br />
                <textarea #MESSAGE[class="erreur"] rows="8" cols="80" name="message|o||Message" id="message">#MESSAGE</textarea>
              </div>
              <div class="formline">
                <label for="code">Pour la lutte anti-robot, saisissez le code ci-dessous pour valider votre message <span class="etoile">*</span></label>
                  <!-- Changer d'image à la volée si elle est illisible  -->
                <ul>
                  <li>Vous voulez changer ce code, cliquez :<a style="cursor:pointer" onclick="document.images.captcha.src='#CODE_URL_CHANGER_IMAGE'"> <strong class="rouge">> ICI <</strong></a></li>
                  <li><img src="#CODE_URL_IMAGE" alt="Captcha" id="captcha" /></li>
                  <li><input type="text" id="code" class="#CODE[form-erreur]" name="code|o|captcha" /></li>
                </ul>
              </div>
              <div class="formline">
                <p>&#160;</p>
                <button type="submit">Envoyer</button>
              </div>
          </FORMULAIRE_contact>
		<//TEST_form_ok>
        </div>
</div>

NB : perso je préférerai inclure tout le html dans cette page pour permette d'y accéder directement. Dans ce cas, il faut voir pour éviter les doublons d'id

Formesmagiques.class.php

<?php
include_once(realpath(dirname(__FILE__)) . "/../../../classes/PluginsClassiques.class.php");

include_once(realpath(dirname(__FILE__)) . "/../../../classes/Message.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Messagedesc.class.php");
include_once(realpath(dirname(__FILE__)) . "/../../../classes/Variable.class.php");

include_once(realpath(dirname(__FILE__)) . "/classes/DescripteurForme.class.php");

include_once(realpath(dirname(__FILE__)) . "/classes/Formulaire.class.php");
include_once(realpath(dirname(__FILE__)) . "/classes/FormulaireInstance.class.php");
include_once(realpath(dirname(__FILE__)) . "/classes/FormulaireChamp.class.php");

class Formesmagiques extends PluginsClassiques
{
	const VERSION   = '0.6.2';
	const MODULE    = 'formesmagiques';
	const NOMMODULE = 'Formesmagiques';
	const PREFIXE   = 'frmg_';

	public $id;
	public $type;
	public $idobjet;
	public $alias;

	public $erreur = false;

	const TABLE = "formesmagiques";

	public $table=self::TABLE;

	var $bddvars = array('id', 'type', 'idobjet', 'alias');

	private $upload_dir;

	public function __construct()
	{
		parent::__construct(self::MODULE);

		$this->upload_dir = realpath(dirname(__FILE__)) . '/upload';
	}

	function init()
	{
		$this->ajout_desc(
		self::NOMMODULE,
			"Plugin Formes Magiques",
			"Ce plugin permet de créer très simplement des formulaires expédiés par email et/ou stockés en base de donnée",
		1);

		if (! (is_dir($this->upload_dir) || mkdir($this->upload_dir, 0777, true))) {
			die("Ne peut créer le dossier de stockage des fichiers $this->upload_dir. Merci de vérifier les permissions.");
		}

		$fo = new Formulaire;
		$fo->init();

		$fi = new FormulaireInstance();
		$fi->init();

		$fc = new FormulaireChamp();
		$fc->init();

		$message = new Message();

		if (! $message->charger("envoiformulaire")) {

			$message->nom = "envoiformulaire";

			$lastid = $message->add();

			$messagedesc = new Messagedesc();
			$messagedesc->message = $lastid;
			$messagedesc->intitule = "Message d'envoi de formulaire Formes Magiques";
			$messagedesc->lang = 1;
			$messagedesc->titre = "Envoi du formulaire __TITRE_FORMULAIRE__";
			$messagedesc->chapo = "";
			$messagedesc->descriptiontext = "
Bonjour,

Le formulaire __TITRE_FORMULAIRE__ a été envoyé à votre intention le __DATE_ENVOI__ à __HEURE_ENVOI__ depuis l'adresse IP __IP_ENVOI__. Les informations indiquées sont les suivantes :

<CHAMPS>
   - __CHAMP_LABEL__ : __CHAMP_VALEUR__
</CHAMPS>
Bonne journée.
";

			$messagedesc->description = "
<p>Bonjour,</p>
<p>Le formulaire __TITRE_FORMULAIRE__ a été envoyé à votre intention le __DATE_ENVOI__ à __HEURE_ENVOI__ depuis l'adresse IP __IP_ENVOI__. Les informations indiquées sont les suivantes :</p>
<ul>
<CHAMPS>
   <li> __CHAMP_LABEL__ : __CHAMP_VALEUR__</li>
</CHAMPS>
</ul>
<p>Bonne journée.</p>
";

			$messagedesc->add();
		}
	}

	function destroy()
	{
		// $this->query("DROP TABLE `".self::TABLE."`");
	}

	public function traiter_formulaire($formdesc) {

		list($nomaction, $parametres) = explode(':', $formdesc->action);

		$nomaction = strtolower($nomaction);

		if ($nomaction == 'email') {
			$this->traiter_formulaire_email($formdesc, $parametres);
		}
		else {
			die("Action '$action' inconnue pour la form $formdesc->nom");
		}
	}

	private function traiter_formulaire_bdd($formdesc, $parametres) {

		$form = new Formulaire();

		if (! $form->charger($formdesc->nom)) {
			$form->nom = $formdesc->nom;
			$form->add();

			$form->charger($formdesc->nom);
		}

		$instance = new FormulaireInstance();

		$instance->formulaire = $form->id;
		$instance->date = time();
		$instance->ip = $_SERVER[REMOTE_ADDR];
		$instance->lu = false;

		$id = $instance->add();

		foreach($formdesc->champs as $champ) {

			// Ignorer les captchas
			if ($champ->type == DescripteurChamp::TYPE_CAPTCHA) continue;

			$bd = new ChampInstance();

			$bd->instance = $id;
			$bd->nom = $champ->formvar;
			$bd->label = $champ->label;
			$bd->valeur = $champ->valeur;

			$bd->add();
		}
	}


	private function traiter_formulaire_email($formdesc, $parametres) {

		$adresses = explode(',', $parametres);

		$message = new Message("envoiformulaire");
		$md = new Messagedesc($message->id);

		$sujet = $this->substitutions_email($md->titre, $formdesc);

		$texte =  $this->substitutions_email($md->descriptiontext, $formdesc);
		$textehtml = $this->substitutions_email($md->description, $formdesc);

		foreach($adresses as $adresse) {
			$res = Mail::envoyer(
				$adresse, $adresse,
				Variable::lire('nomsite'), Variable::lire('emailfrom'),
				$sujet,
				$textehtml,
				$texte
			);
		}
	}

	private function substitutions_email($texte, $formdesc) {

		$texte = str_replace("__TITRE_FORMULAIRE__", $formdesc->nom, $texte);
		$texte = str_replace("__DATE_ENVOI__", date("d/m/Y"), $texte);
		$texte = str_replace("__HEURE_ENVOI__", date("H:i:s"), $texte);
		$texte = str_replace("__IP_ENVOI__", $_SERVER['REMOTE_ADDR'], $texte);

		if (preg_match_all("`<CHAMPS>(.+)</CHAMPS>`s", $texte, $matches, PREG_SET_ORDER)) {

			foreach($matches as $match) {

				$res = '';

				foreach($formdesc->champs as $champ) {

					if ($champ->type == DescripteurChamp::TYPE_CAPTCHA) continue;

					$tmp = $match[1];

					$tmp = str_replace("__CHAMP_NOM__", $champ->formvar, $tmp);
					$tmp = str_replace("__CHAMP_LABEL__", $champ->label, $tmp);
					$tmp = str_replace("__CHAMP_VALEUR__", $champ->valeur, $tmp);

					$res .= $tmp;
				}

				$texte = str_replace($match[0], $res, $texte);
			}
		}

		return $texte;
	}

	public function analyse() {

		global $res;

		$matches = array();

		// Retrouver le texte réel de la boucle, qui est en fait occulté par le parser...
		if (preg_match_all('`<FORMULAIRE_([^ ]+) ([^>]*)>(:?(.*))</FORMULAIRE_\1>`Us', $res,  $matches, PREG_SET_ORDER)) {

			foreach($matches as $match) {

				$nom = $match[1];
				$args = $match[2];
				$formtexte = $match[3];

				$sid = 'frm_'.$nom;

				$formtags = array('titre', 'traitement', 'urlsucces', 'url');

				$traitement = lireTag($args, "traitement"); // BD / EMAIL / THELIA:{connexion|nouveau}
				$titre = lireTag($args, "titre");
				$urlsucces = lireTag($args, "urlsucces");
				$url = lireTag($args, "url");

				// Compat 0.6.0
				if (empty($traitement)) {
					$traitement = lireTag($args, "action");

					if (! empty($traitement)) {
						$formtags[] = 'action';
					}
				}

				$formdesc = new DescripteurForm();

				$formdesc->sid = $sid;
				$formdesc->nom = empty($titre) ? $nom : $titre;
				$formdesc->action = $traitement != '' ? $traitement : 'bd';
				$formdesc->urlsucces = str_replace("&amp;", "&", $urlsucces);

				$avec_file = false;

				$inpmatches = array();

				if (preg_match_all('/name[\s]*=[\s]*"([^"]+)"/', $formtexte, $inpmatches, PREG_SET_ORDER)) {

					foreach($inpmatches as $inpmatch) {
						$champ = $formdesc->ajouter_champ($inpmatch[1]);

						$avec_file |= $champ->type == DescripteurChamp::TYPE_FILE;

						$formtexte = str_replace($inpmatch[0], 'name="'.$champ->formvar.'"', $formtexte);
					}
				}

				// Traitement des paramètres, si présents
				if (isset($_REQUEST['form_sid']) && $_REQUEST['form_sid'] == $sid) {

					$formdesc->controle_params();

					if (! $formdesc->champ_erreur->erreur) {

						$this->traiter_formulaire($formdesc);

						if ($formdesc->urlsucces != '') {
							redirige($formdesc->urlsucces);
						}
					}
				}

				//$texte  = '<form name="'.$nom.'"'; //  action="'.htmlentities(url_page_courante()).'"';
				$texte  = '<form name="'.$nom.'" action="'.$url.'"';

				// Ajouter tous les attributs qu'on ne connait pas.
				if (preg_match_all("/([a-zA-Z]+)=\"[^\"]+\"/", $args, $tagmatches, PREG_SET_ORDER)) {
					foreach($tagmatches as $tagmatch) {
						if (! in_array($tagmatch[1], $formtags)) $texte .= ' '.$tagmatch[0];
					}
				}

				// Upload -> multipart/form-data !
				if ($avec_file != '') $texte .= ' enctype="multipart/form-data"';

				$texte .= ">\n";

				$texte .= '<input type="hidden" name="form_sid" value="'.$sid.'" />'."\n";
				$texte .= '<input type="hidden" name="action" value="formesmagiques" />'."\n";

				$texte .= $formdesc->substitutions($formtexte);

				$texte .= '</form>'."\n";

				$res = str_replace($match[0], $texte, $res);
			}
		}
	}
}
?>

NB : remplacer les realpath(dirname(__FILE__)) par __DIR__ si php > 5.3


Aide les autres, ils t'aideront en retour.

Offline


Bonjour,

Elyos : désolé de l'absence de réaction suivant ton dernier post, je ne laisse pas tomber mais j'ai quelques soucis à régler en urgence avant de régler celui là.

Je n'ai donc pas encore examiné les différents codes de tes pages, mais je ne manque pas de revenir dès que possible.

Merci encore pour ton aide…

neofarm


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Je crois qu neofarm est décédé.

Paix à son âme.

big_smile


Aide les autres, ils t'aideront en retour.

Offline


Non Non je suis encore là big_smile

Seulement j'ai un autre problème que je dois régler avant tout, mais je reviens sur celui là dès que possible.

Aux dernières nouvelles je n'avais toujours pas réussi à avoir le message de réussite d'envoi du formulaire et c'est toujours le cas.

Pas encore décédé, je dis bien pas encore… lol mais ça risque bien d'arriver un jour roll


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4

Offline


Bonjour Elyos,

Me revoilà avec mon problème de formulaire…

Je récapitule ce qui fonctionne pour si tu es ok reprendre là où on avait laissé :

les liens pointent bien sur le bon formulaire.
le tiroir coulissant fonctionne malgré une ouverture brusque et non fluide.
le contenu des champs des formulaires est bien envoyé par mail au clic sur envoyer.

MAIS, j'ai toujours en FO la phrase "Traitement en cours…" dans le conteneur, malgré l'envoi du mail, rien n'indique que le message ai été envoyé et donc aucun moyen de savoir si cela à fonctionné pour l'envoyeur…

J'essaie de mettre en ligne ce site pour que tu puisse voir cela directement sur le site en question, mais j'ai un problème pour la mise en ligne que je décris dans un autre post.

Je te remercie pour ton aide…

neofarm

Last edited by neofarm (15-11-2013 05:05:07)


Mac OS 10.5 Léopard - Mamp - Thelia versions 1.4.4 - 1.5.1 - 1.5.3.4