• Comment créer un formulaire d'envoi à un ami avec eForm#

  • laurentc Reply #1, 4 years, 1 month ago

    Reply
    Pour remplacer le message vide de ce post Si quelqu'un peut le traduire je suis OK

    ATTENTION pour utiliser cette fonctionnalité vous devez Modifier (hacker) le snippet eForm
    1) Modification du snippet eForm
    Ajouter le code suivant de Pixelchutes dans le snippet eForm ligne 93 :

    if( $params[to]{0} == '(' ) $params[to] = str_replace( array('((','))'), array('[+','+]'), $params[to] ); // PHx workaround
    if( $params[from]{0} == '(' ) $params[from] = str_replace( array('((','))'), array('[+','+]'), $params[from] ); // PHx workaround
    if( $params[fromname]{0} == '(' ) $params[fromname] = str_replace( array('((','))'), array('[+','+]'), $params[fromname] ); // PHx workaround
    if( $params[replyto]{0} == '(' ) $params[replyto] = str_replace( array('((','))'), array('[+','+]'), $params[replyto] ); // PHx workaround
    $params[subject] = str_replace( array('((','))'), array('[+','+]'), $params[subject] ); // PHx workaround



    Ce code permet d'utiliser n'importe lequel des champs du formulaire eForm comme valeur des paramètres &to, &from, &fromname, &replyto et &subject en utilisant la syntaxe ((nomDeMonChamp)) ex : &to=`((friendemail))`



    2) Formulaire d'envoi du mail Chunk : sendToAFriendForm
    <p><span style="color:#900;">[+validationmessage+]</span></p>
    <form id="formSTF" name="formSTF" method="post" action="[~[*id*]~]">
      <table width="450" border="0">
        <tr>
          <td width="220"> Your friend name :<br>
            <input id="friendname" name="friendname" type="text" eform="Nom ami:string:1:Le nom est obligatoire" />      </td>
          <td width="220"> Your friend e-mail <br>
            <input id="friendemail" name="friendemail" type="text" eform="E-mail ami:email:1:" />      </td>
        </tr>
        <tr>
          <td colspan="2"> </td>
        </tr>
        <tr>
          <td> Your name :<br>
            <input id="yourname" name="yourname" type="text" eform="Votre nom:string:1:Le nom est obligatoire" />      </td>
          <td>
    	Your e-mail :<br>
                        <input id="youremail" name="youremail" type="text" eform="Votre email:email:1:" />	  </td>
        </tr>
        <tr>
          <td> </td>
          <td> </td>
        </tr>
        <tr>
          <td colspan="2">
    	  Message :<br>
    	  <textarea id="message" name="message" rows="7" eform="Message:string:1:Le message est obligatoire"></textarea>	  </td>
        </tr>
        <tr>
          <td>
    	  Merci d'entrer le code anti spam suivant : <br>
    		<img src="[+verimageurl+]" alt="verification code" border="1"/>	  </td>
          <td>
    	  Code : <input type="text" name="vericode" size="20" />	  </td>
        </tr>
        <tr>
          <td colspan="2">
            <input type="submit" name="Submit" value="Envoyer">
          </td>
        </tr>
      </table>
    </form>




    3) Template du mail envoyé à l'ami Chunk : formSTFemail

    <table width="515" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td width="15"> </td>
        <td height="50" align="center" valign="top"><br>
            <table width="495" height="28" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td align="left"><span class="Style4">[+emailTitle+]</span></td>
              </tr>
            </table>
            <br>
            <table width="500" border="0" cellpadding="20" cellspacing="0">
              <tr>
                <td align="left" valign="top" bgcolor="#F9FAF4" class="Style1">
    			              Hello <strong>[+friendname+]</strong>,<br>
                  <strong>[+yourname+]</strong> send you this message :<br>
                <br>
                [+message+]
    <br/>
    See this page : [+link+]
    </td>
              </tr>
            </table>  </td>
      </tr>
    </table>



    4) Snippet permettant de récupérer l'url de la page visitée (page précédante) Snippet : eFormSTF

    <?php
    function eFormSTFlink( &$fields ){
     global $modx;
    
       $fields['link'] = '<a href="'.$_SERVER['HTTP_REFERER'].'" >'.$_SERVER['HTTP_REFERER'].'</a>' ; //  'http://www.toto.com';
    
    		return true;
     }
    ?>





    5) Page contenant le formulaire d'envoi du mail

    [[eFormSTF]]
    [!eForm? &formid=`formSTF` &tpl=`sendToAFriendForm` &report=`formSTFemail` &thankyou=`formSTFtyou` &subject=`Envoyer a un ami` &vericode=`1` &debug=`2`  &to=`((friendemail))` &from=`((youremail))` &fromname=`((yourname))`  &eformOnBeforeMailSent=`eFormSTFlink`!]


    Et voilou !!


  • davidm Reply #2, 4 years, 1 month ago

    Reply
    Arf !

    Bon c'est dommage on s'est croisé !!!
    J'ai bouclé ça ce matin : http://modxcms.com/forums/index.php/topic,24628.0.html

    Avec quelques différences par rapport à cette méthode.

    Notamment, le nouveau code de pixelchute (hacker n'est nécessaire uniquement si vous avez PHx activé) est plus efficace (il couvre les champs custom) et plus court aussi (posté originellement ici):

    foreach( $params as $key=>$val ) $params[ $key ] = str_replace( array('((','))'), array('[+','+]'), $val );  // pixelchutes PHx workaround

    Et comme je suis pas codeur, j'ai triché un peu pour récupérer l'URL en ajoutant des champs masqués :




    Que je rajoute ensuite dans le chunk de report de la manière suivante :

    <a href="[+urlsite+][+link+]">[+title+]</a>
    Vous noterez que j'ai injecté le pagetitle pour pouvoir afficher un lien plus sympa
    Vous pouvez le voir en action sur un site que je suis en train de mettre en place, pour les articles du blog :
    http://www.pargade-notaires.fr/blog/pratique-notariale/delai-de-retractation-et-immeuble-a-usage-mixte.html
    (le formulaire est masqué via jQuery, cliquer sur le lien dans la colonne de droite en bas)

    Edit : Sinon, un conseil, utilisez &protectSubmit=`0` car si vous recommandez plus d'une page avec le même expéditeur et le même destinataire c'est considéré par eForm comme un doublon et ça donne un message d'erreur.


  • laurentc Reply #3, 4 years, 1 month ago

    Reply
    Désolé, j'ai mis un peu de temps à voir ton message et à retrouver la procédure.

    C'est vrai que le hack n'est nécessaire qu'en présence de PHx...mais y a-t-il encore des personnes qui n'utilisent pas PHx ??!
    Le nouveau code est effectivement plus simple !

    Une dernière chose, mais la c'est perso, David, l'effet jQuery de ton formulaire, ça ne serait pas plus esthétique s'il partait de la droite ?


  • davidm Reply #4, 4 years, 1 month ago

    Reply
    Quote from: laurentc at Apr 11, 2008, 03:27 AM
    Une dernière chose, mais la c'est perso, David, l'effet jQuery de ton formulaire, ça ne serait pas plus esthétique s'il partait de la droite ?

    Bien vu, effectivement je vais modifier ça


  • alchime Reply #5, 3 years, 11 months ago

    Reply

    Pourrais tu partager le code Jquery, et pourquoi pas mootools ?

    Merci d'avance.


  • davidm Reply #6, 3 years, 11 months ago

    Reply
    Tu peux le voir dans le code source de la page citée plus haut mais voilà


    <script type="text/javascript">
    
    var $j = jQuery.noConflict();
    
        $j(document).ready(function() {
                 $j('#stf').hide(); 
    
                 $j('a#show_stf').click(function() {
                             $j('#stf').toggle(400);
                            return false;  }); 
         }); 
    </script>


    Le formulaire

    <div id="stf">
    <!-- La ligne suivante est obligatoire -->
    <p class="error"> [+validationmessage+] </p>
     
    <!-- Début du formulaire -->
    <form action="[~[*id*]~]" id="SendToFriend" method="post" name="SendToFriend">
        <fieldset>
    
              <input type="hidden" name="formid" value="SendToFriend" />
          
            <p><label for="sfName1"><strong>Votre nom :</strong> <input class="text" id="sfName1" name="name1" type="text" /></label></p>
     
            <p><label for="sfEmail1"><strong>Votre Email : </strong><input class="text" id="sfEmail1" name="emailfrom" type="text" eform="Votre adresse email:email:1"/></label></p>
     
            <p><label for="sfName2"><strong>Nom de votre ami :</strong> <input class="text" id="sfName2" name="name2" type="text" /></label></p>
    
            <p><label for="sfEmail2"><strong>Email de votre ami : </strong><input class="text" id="sfEmail2" name="email" type="text" eform="Adresse email de votre ami:email:1" /></label></p>
     
     <p style="padding-top: 10px;">Merci de saisir le code de vérification suivant :</p>
     <img src="[+verimageurl+]" alt="code de vérification" style="border: 1px solid #ccc; margin: 10px 0px;"/>
     <p><label accesskey="c" for="vericode">Code</label><input type="text" name="vericode" size="20" /></p>
    
            <!-- Bouton de validation et d'envoi du message --> 
          <input name="urlsite" type="hidden" value="[(site_url)]" eform="::0::" />
          <input name="link" type="hidden" value="[~[*id*]~]" eform="::0::" />
          <input name="title" type="hidden" value="[*pagetitle*]" eform="::0::" />
          <input class="button" id="sfRecommend" name="recommend" type="submit" value="Envoyer" />
        </fieldset>
    </form>
    </div>