Ajouter un nouveau formulaire accessible depuis le frontend

  • Par Magentix le 01/01/2010
  • Difficulté : 4/4

Ajouter un nouveau formulaire accessible depuis le frontend Il peut être utile d'intégrer à Magento un formulaire, du même type que le formulaire de contact mais avec champs personnalisés. Cet article explique comment développer un module qui intégrera un nouveau formulaire sur le frontend, avec configuration depuis l'administration et gestion du gabarit e-mail.

Besoin

Pour le développement de notre module nous imaginerons qu'il nous faut ajouter à notre e-commerce un formulaire de demande de brochure, à envoyer au client par courrier. Le client accède à une page ou il renseigne ses coordonnées : nom, prénom, adresse... Un mail où figure les informations saisie est alors envoyé à l'administrateur.

Prérequis

Le module a été développé sous la version 1.3.2.3 de Magento.

Architecture du module

  • app/code/local/Magentix/Brochure/controllers/
  • IndexController.php
  • app/code/local/Magentix/Brochure/Helper/
  • Data.php
  • app/code/local/Magentix/Brochure/etc/
  • config.xml
  • system.xml
  • app/design/frontend/default/default/layout/
  • brochure.xml
  • app/design/frontend/default/default/template/brochure/
  • form.phtml
  • app/locale/fr_FR/
  • Magentix_Brochure.csv
  • app/locale/fr_FR/template/email/
  • brochure_form.html
  • app/etc/modules/
  • Magentix_Brochure.xml

Développement du module

Nous commercerons, après avoir créé l'architecture complète du module, par déclarer son existence :

app/etc/modules/Magentix_Brochure.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Magentix_Brochure>
            <active>[[blue]]true[[/blue]]</active>
            <codePool>[[blue]]local[[/blue]]</codePool>
        </Magentix_Brochure>
    </modules>
</config>

Dans cet exemple le formulaire sera constitué de 3 champs : nom, adresse et téléphone. Les champs nom et adresse seront obligatoires, téléphone sera facultatif.

Nous allons maintenant créer le formulaire depuis le fichier template form.phml, définir sa structure dans le layout défini par brochure.xml, éditer le template de mail par défaut brochure_form.html, et enfin définir les traductions dans le fichier de langue Magentix_Brochure.csv.

Dans le layout, on indique notamment la structure de page à utiliser : 1 column, 2 columns with right bar... Ainsi que le chemin vers le fichier template à utiliser et contenant le code HTML du formulaire :

app/design/frontend/default/default/layout/brochure.xml

<?xml version="1.0"?>
<layout version="0.1.0">
        <default></default>
        <brochure_index_index>
                <reference name="root">
                        <action method="setTemplate"><template>[[blue]]page/2columns-right.phtml[[/blue]]</template></action>
                        <action method="setHeaderTitle" translate="title" module="brochure"><title>[[blue]]Brochure[[/blue]]</title></action>
                </reference>
                <reference name="content">
                        <block type="core/template" name="brochureForm" template="brochure/form.phtml"/>
                </reference>
        </brochure_index_index>
</layout>

Le template contiendra nos 3 champs et le bouton de validation. Une vérification JavaScript des champs obligatoires est possible par l'instanciation de la classe JavaScript VarienForm. Les champs vérifiés sont ceux dont la classe CSS contient required-entry (ajoutez "validate-email" pour vérifier la cohérence d'une adresse e-mail).

app/design/frontend/default/default/template/brochure/form.phtml

<div id="messages_product_view"><?php echo $this->getMessagesBlock()->getGroupedHtml() ?></div>

<form action="<?php echo $this->getFormAction(); ?>" id="brochureForm" method="post">

   <div class="input-box">
      <label for="name"><?php echo $this->__('Name') ?> <span class="required">*</span></label><br />
      <input name="name" id="name" title="<?php echo $this->__('Name') ?>" value="<?php echo $this->htmlEscape(Mage::helper('brochure')->getUserName()) ?>" class="required-entry input-text" type="text" />
   </div>

   <div class="input-box">
      <label for="address"><?php echo $this->__('Address') ?> <span class="required">*</span></label><br />
      <input name="address" id="address" title="<?php echo $this->__('Address') ?>" value="" class="required-entry input-text" type="text" />
   </div>

   <div class="input-box">
      <label for="telephone"><?php echo $this->__('Telephone') ?> </label><br />
      <input name="telephone" id="telephone" title="<?php echo $this->__('Telephone') ?>" value="" class="input-text" type="text" />
   </div>

    <div class="button-set">
        <p class="required"><?php echo $this->__('* Required Fields') ?></p>
        <button class="form-button" type="submit"><span><?php echo $this->__('Submit') ?></span></button>
    </div>
</form>

<script type="text/javascript">
   var magazineForm = new VarienForm('brochureForm', true);
</script>

Nous allons ensuite éditer le fichier de langue Magentix_Brochure.csv afin d'indiquer les traductions des termes employés dans le formulaire :

app/locale/fr_FR/Magentix_Brochure.csv

"* Required Fields","* Champs obligatoires"
"Submit","Envoyer"
"Name","Nom"
"Address","Adresse"
"Telephone","Telephone"

Les informations recueillies seront envoyés par e-mail. Dans Magento, la structure du mail envoyé est définie par un gabarit, que l'on pourra éditer depuis l'administration dans la gestion des Emails transactionnels. Le fichier brochure_form.html correspond au "gabarit par défaut pour la locale".

L'encodage du fichier doit être UTF-8, autrement le mail envoyé sera vide.

app/locale/fr_FR/template/email/brochure_form.html

<!--@subject Demande de brochure@-->

Nom : {{var data.name}}

Adresse : {{var data.address}}

Telephone : {{var data.telephone}}

Nous allons maintenant nous attaquer au controller et définir les différentes actions : l'action à exécuter par défaut indexAction() dans laquelle on récupère le bloc brochureForm précédemment créé, et l'action postAction() exécuté lorsque le formulaire est soumis, avec récupération du POST, vérifications des champs, sélection du template mail, envoie de l'e-mail et affichage d'un message "succès" ou "erreur" à l'internaute. La fonction preDispatch() permet l'affichage d'une page d'erreur 404 si le formulaire brochure est désactivé depuis l'administration :

app/code/local/Magentix/Brochure/controllers/IndexController.php

<?php

class Magentix_Brochure_IndexController extends Mage_Core_Controller_Front_Action {

    const XML_PATH_EMAIL_RECIPIENT  = 'brochure/email/recipient_email';
    const XML_PATH_EMAIL_SENDER     = 'brochure/email/sender_email_identity';
    const XML_PATH_EMAIL_TEMPLATE   = 'brochure/email/email_template';
    const XML_PATH_ENABLED          = 'brochure/brochure/enabled';

    public function preDispatch() {
        parent::preDispatch();

        if( !Mage::getStoreConfigFlag(self::XML_PATH_ENABLED) ) {
            $this->norouteAction();
        }
    }

    public function indexAction() {
        $this->loadLayout();
        $this->getLayout()->getBlock('brochureForm')->setFormAction( Mage::getUrl('*/*/post') );

        $this->_initLayoutMessages('customer/session');
        $this->_initLayoutMessages('catalog/session');
        $this->renderLayout();
    }

    public function postAction() {
        $post = $this->getRequest()->getPost();
        if ($post) {
            $translate = Mage::getSingleton('core/translate');
            /* @var $translate Mage_Core_Model_Translate */
            $translate->setTranslateInline(false);
                        
            try {
                $postObject = new Varien_Object();
                $postObject->setData($post);

                $error = false;

                if (!Zend_Validate::is(trim($post['name']) , 'NotEmpty')) $error = true;
                if (!Zend_Validate::is(trim($post['address']) , 'NotEmpty')) $error = true;

                if ($error) throw new Exception();

                $mailTemplate = Mage::getModel('core/email_template');
                /* @var $mailTemplate Mage_Core_Model_Email_Template */
                $mailTemplate->setDesignConfig(array('area' => 'frontend'))
                    /* L'adresse de réponse est ici l'adresse de l'expéditeur définie dans l'administration */
                    ->setReplyTo(Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER))
                    ->sendTransactional(
                        Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE),
                        Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER),
                        Mage::getStoreConfig(self::XML_PATH_EMAIL_RECIPIENT),
                        null,
                        array('data' => $postObject)
                    );

                if (!$mailTemplate->getSentSuccess()) {
                    throw new Exception();
                }

                $translate->setTranslateInline(true);

                Mage::getSingleton('customer/session')->addSuccess(Mage::helper('brochure')->__('Your inquiry was submitted'));
                                
                $this->_redirect('*/*/');

                return;
            } catch (Exception $e) {
                $translate->setTranslateInline(true);

                Mage::getSingleton('customer/session')->addError(Mage::helper('brochure')->__('Unable to submit your request. Please, try again later'));
                $this->_redirect('*/*/');
                return;
            }

        } else {
            $this->_redirect('*/*/');
        }
    }
}

Dans notre Helper, la fonction getUserName() utilisée dans le fichier template form.phtml permet de récupérer le nom du client depuis la session ouverte si celui-ci est déjà connecté. Le champ "nom" du formulaire sera pré-rempli. On peut développer une fonction pour chaque élément associé au customer que l'on souhaite récupérer : prénom, e-mail, adresse...

app/code/local/Magentix/Brochure/Helper/Data.php

<?php

class Magentix_Brochure_Helper_Data extends Mage_Core_Helper_Abstract {
    public function getUserName() {
        if (!Mage::getSingleton('customer/session')->isLoggedIn()) return '';

        $customer = Mage::getSingleton('customer/session')->getCustomer();
        return trim($customer->getLastname());
    }
}

Pour finir, il ne reste plus qu'à éditer nos fichiers de configuration config.xml et system.xml :

app/code/local/Magentix/Brochure/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Magentix_Brochure>
            <version>1.0</version>
        </Magentix_Brochure>
    </modules>
    <frontend>
        <routers>
            <brochure>
                <use>standard</use>
                <args>
                    <module>Magentix_Brochure</module>
                    <frontName>brochure</frontName>
                </args>
            </brochure>
        </routers>
        <translate>
            <modules>
                <Magentix_Brochure>
                    <files>
                    <default>Magentix_Brochure.csv</default>
                    </files>
                </Magentix_Brochure>
            </modules>
        </translate>
        <layout>
            <updates>
            <brochure>
                <file>brochure.xml</file>
            </brochure>
            </updates>
        </layout>
    </frontend>
    <global>
        <helpers>
            <brochure>
            <class>Magentix_Brochure_Helper</class>
            </brochure>
        </helpers>
        <template>
            <email>
            <brochure_email_email_template translate="label" module="brochure">
                <label>Brochure Form</label>
                <file>brochure_form.html</file>
                <type>text</type>
            </brochure_email_email_template>
            </email>
        </template>
    </global>
    <adminhtml>
        <translate>
            <modules>
            <Magentix_Brochure>
                <files>
                <default>Magentix_Brochure.csv</default>
                </files>
            </Magentix_Brochure>
            </modules>
        </translate>
        <acl>
            <resources>
            <admin>
                <children>
                <system>
                    <children>
                    <config>
                        <children>
                        <brochure translate="title" module="brochure">
                            <title>Brochure Section</title>
                        </brochure>
                        </children>
                    </config>
                    </children>
                </system>
                </children>
            </admin>
        </resources>
        </acl>
    </adminhtml>
    <default>
        <brochure>
            <brochure>
            <enabled>1</enabled>
            </brochure>
            <email>
            <recipient_email><![CDATA[hello@example.com]]></recipient_email>
            <sender_email_identity>custom2</sender_email_identity>
            <email_template>brochure_email_email_template</email_template>
            </email>
        </brochure>
    </default>
</config>

app/code/local/Magentix/Brochure/etc/system.xml

<?xml version="1.0"?>
<config>
  <sections>
    <brochure translate="label" module="brochure">
      <label>Brochure</label>
      <tab>general</tab>
      <frontend_type>text</frontend_type>
      <sort_order>101</sort_order>
      <show_in_default>1</show_in_default>
      <show_in_website>1</show_in_website>
      <show_in_store>1</show_in_store>
      <groups>
        <brochure translate="label">
          <label>Accept our brochure</label>
          <frontend_type>text</frontend_type>
          <sort_order>10</sort_order>
          <show_in_default>1</show_in_default>
          <show_in_website>1</show_in_website>
          <show_in_store>1</show_in_store>
          <fields>
            <enabled translate="label">
              <label>Enable Brochure</label>
              <frontend_type>select</frontend_type>
              <source_model>adminhtml/system_config_source_yesno</source_model>
              <sort_order>10</sort_order>
              <show_in_default>1</show_in_default>
              <show_in_website>1</show_in_website>
              <show_in_store>1</show_in_store>
            </enabled>
          </fields>
        </brochure>
        <email translate="label">
          <label>Email Options</label>
          <frontend_type>text</frontend_type>
          <sort_order>50</sort_order>
          <show_in_default>1</show_in_default>
          <show_in_website>1</show_in_website>
          <show_in_store>1</show_in_store>
          <fields>
            <recipient_email translate="label">
              <label>Send Emails To</label>
              <frontend_type>text</frontend_type>
              <sort_order>10</sort_order>
              <show_in_default>1</show_in_default>
              <show_in_website>1</show_in_website>
              <show_in_store>1</show_in_store>
            </recipient_email>
            <sender_email_identity translate="label">
              <label>Email Sender</label>
              <frontend_type>select</frontend_type>
              <source_model>adminhtml/system_config_source_email_identity</source_model>
              <sort_order>20</sort_order>
              <show_in_default>1</show_in_default>
              <show_in_website>1</show_in_website>
              <show_in_store>1</show_in_store>
            </sender_email_identity>
            <email_template translate="label">
              <label>Email Template</label>
              <frontend_type>select</frontend_type>
              <source_model>adminhtml/system_config_source_email_template</source_model>
              <sort_order>30</sort_order>
              <show_in_default>1</show_in_default>
              <show_in_website>1</show_in_website>
              <show_in_store>1</show_in_store>
            </email_template>
          </fields>
        </email>
      </groups>
    </brochure>
  </sections>
</config>

Le nouveau formulaire est maintenant accessible depuis l'URL http://www.site.com/brochure.

Il ne reste plus qu'à configurer le module depuis l'administration : Système > Configuration > Brochure.

Administration du formulaire

Il est également possible d'ajouter un gabarit de mail pour le formulaire Brochure dans la gestion des Emails transactionnels. Si ce gabarit existe, il sera envoyé à la place du gabarit par défaut brochure_form.html.

Administration du formulaire

Vous pouvez enfin continuer l'édition du fichier de traduction Magentix_Brochure.csv afin de le compléter avec l'ensemble des termes utilisés dans ce module.

45

Commentez cet article Ajouter un nouveau formulaire accessible depuis le frontend

tiagop Le 20/06/2010 à 23:55
Bon tuto mais pour le faire fonctionner sous magento 1.4 il faut retirer le neud de "config.xml" et créer un fichier "adminhtml.xml" dans "app/code/local/Magentix/Brochure/etc/" et mettre dedans le noeud et son contenu. Voilà sinon vous aurez une erreur "access denied". Merci
#1
Magentix Le 20/06/2010 à 23:55
Merci pour l'info !
#2
l2vinci Le 20/06/2010 à 23:56
Bonjour,
Franchement Merci Beaucoup pour le temps que vous avez consacré pour mettre en place ce très intéressant Tuto,
sinon je suis sur Magento v1.3.2.4 et j'ai suivi à la lettre de A à Z les instructions, malheureusement en tapant l'URL:
http://localhost/monsite/brochure (je travail en localhost)
il m'affiche l'erreur 404 Not found in this server!!!!
Grand merci d'avance pour votre aide,
#3
Magentix Le 20/06/2010 à 23:57
L'url de page est dictée par le contrôleur en place dans le module :

<routers>
<brochure>
<use>standard</use>
<args>
<module>Magentix_Brochure</module>
<frontName>brochure</frontName>
</args>
</brochure>
</routers>


Le "frontName" défini ici est "brochure", cela signifie que la page est accessible depuis l'url "/brochure". La fonction exécutée est "indexAction" du fichier "IndexController.php" (on peut accéder à la page en indiquant l'url /brochure/index/index/). Lorsque le formulaire est soumis j'exécute alors la fonction "postAction" du même fichier (soit /brochure/index/post/).

Donc dans l'URL /brochure/index/index :
- brochure : désigne le nom défini pour frontname dans le fichier de configuration (config.xml)
- index : désigne le nom du contrôleur (IndexController.php)
- index : désigne la méthode du contrôleur à exécuter (indexAction)

Par défaut c'est toujours index qui sera visé, c'est pourquoi il n'est pas nécessaire de l'indiquer dans l'url.

Avant d'exécuter la fonction spécifiée, la méthode "preDispatch" est exécutée, elle vérifie ici que le formulaire est bien activé depuis la configuration et affiche une erreur 404 si ce n'est pas le cas.

Voilà pour la petite explication ;) Donc le problème peut venir d'un des cas de figure suivant :

- Le contrôleur n'est pas déclaré dans le fichier config.xml
- La fonction indexAction du contrôleur n'existe pas
- Le formulaire est désactivé depuis la configuration (brochure/brochure/enabled)
- Le cache n'a pas été rafraichi (supprimer le contenu du dossier /var/cache pour être sûre)
#4
et Le 20/06/2010 à 23:57
Bonjour,

J'ai tenté de reproduire ce cas en faisant un "bete" copier/coller du code propose sur cette page pour le placer dans chaque fichier.
Je vois bien le module depuis l'administration : Système > Configuration > Brochure
Mais quand je clic pour le configurer : je perds le menu de configuration a gauche (seule la liste de choix de portee de configuration s'affiche) et la page reste blanche la ou la partie administration du module devrait s'afficher
Merci d'avance
#5
et Le 20/06/2010 à 23:58
Bonjour,

Finalement (sans autre intervention) la partie admin fonctionne
Peut-etre un pb d'acces serveur au moment de mes premiers tests (j'avais pourtant bien vide le cache)
Tout est bien qui fini bien :)
Tutorial tres utile et pedagogique, merci.
#6
Magentix Le 20/06/2010 à 23:58
Yep, désolé j'avais pas vu le premier message ;) Pour ce cas de figure le problème se résout généralement en tout simplement en se déconnectant (fermer la session).
#7
Geeko Le 20/06/2010 à 23:59
Bonjour !

Excellent tuto ! Je recherche justement ce type de développement.
Je l'ai testé sur Magento 1.3.3.0.
L'affichage frontend se fait parfaitement.
Mais dans la partie Admin, j'ai un access denied.
Une suggestion ?
Merci
#8
casoni Le 04/07/2010 à 20:39
Bonjour!
est ce qu'il est compatible avec la version 1.4.0.1 car cela m'intérésserait.
est ce qu'il est sur Magento connect.
merci
#9
Magentix Le 04/07/2010 à 20:44
Non, il s'agit d'un tutoriel pour l'ajout d'un formulaire, il n'est pas sur Magento Connect.
Pour Magento 1.4.0.1 il n'y aura aucun problème ;)
#10
Max Le 08/07/2010 à 13:35
Bonjour,

Excellent tuto. Néanmoins, j'ai un problème. Je n'arrive pas à recevoir la newsletter sur ma boîte mail. J'utilise un thème perso.

Pour forcer l'envoi, j'ai remplacé la ligne :

<form action="<?php echo $this->getFormAction(); ?>" id="brochureForm" method="post">

Par

<form action="http://www.monsite.com/fr/index.php/brochure/index/post/" id="brochureForm" method="post">

Rien n'y fait. Comment retrouver la bonne URL ?

Bien à vous,

Max
#11
Max Le 09/07/2010 à 12:09
Ok, le problème est résolu.
#12
François Le 21/07/2010 à 16:28
Bonjour, j'ai suivis le tutoriel, mais pour créer un formulaire pour les Professionnels.
J'ai donc remplacé partout le mot "brochure" par "formulaire-pro'.
A l'arrivée, j'ai cette erreur qui apparait dans la partie Admin :

Fatal error: Class 'Mage_Formulaire-Pro_Helper_Data' not found in C:\xampp\htdocs\mon-site\app\Mage.php on line 520

Je pense que le problème vient du "-" entre formulaire et Pro. Ou est ce que je peux modifier ça ? dans le fichier config.xml ?

(J'utilise Magento 1.4.0.1 )

Merci si quelqu'un sait ...

François
#13
Magentix Le 21/07/2010 à 17:20
SI vous souhaitez modifier le nom du module et du formulaire il faut en effet ne pas mettre de "-".

Il vous va falloir remplacer toutes les occurrences "brochure" par "formulairepro". Le nom du module sera FormulairePro.

- Le nom du dossier contenant le module devient : app/code/local/Aze/FormulairePro/

- Le nom des classes sera :

Aze_FormulairePro_Helper_Data
Aze_FormulairePro_IndexController

- Dans les fichiers respectez les minuscules et majuscule. Pour "brochure" remplacez par "formulairepro". Pour "Brochure", remplacez par "FormulairePro"
#14
Hervé Le 13/08/2010 à 17:47
Bonjour,
Merci pour cet excellent tutoriel.

J'ai ajouté un champs pour envoyer un fichier (upload sur le serveur puis attaché au mail). Pas de problème de ce côté-là.

Par contre le mail ne part pas. L'exception qui se lève se situe au niveau du controller, ici :

if (!$mailTemplate->getSentSuccess()) {
throw new Exception();
}

Le formulaire de contact normal fonctionne parfaitement. Donc pas de problème d'envoi de mail niveau configuration du serveur ou autre. Enfin je crois pas ;-)

Une idée de ce qui peut faire que ça ne marche pas ? Je sèche un peu.

Merci beaucoup d'avance.
#15
Hervé Le 13/08/2010 à 17:50
J'ai oublié de dire que j'ai modifié le nom du module. J'ai réessayé avec un nouveau module sans aucun changement (tel que décrit ici) et pas de problème.

Je vais voir ce que j'ai fait de faux, mais si vous avez une piste...
#16
Hervé Le 13/08/2010 à 18:21
Pfff... c'est tout bon. J'avais oublié de renommer un fichier, le template d'envoi de l'e-mail...

Merci quand même ;-)
#17
Xid Le 25/08/2010 à 10:27
Bonjour je suis sous Magento 1.4.0.1

J'ai un Access Denied aussi (pourtant j'ai bien supprimé le config.xml et remplacé par adminhtml.xml)

J'ai aussi renommé le formulaire en prenant soin de modifier les noms correspondant.

Je suis dans une impasse...

Merci d'avance!
#18
Xid Le 25/08/2010 à 13:19
Le problème est corrigé, en fait j'avais mal interpreté le 1er message il ne faut pas supprimer config.xml qui reste identique mais dupliquer les balises adminHtml pour le plecer dans le fichier adminHtml.xml

J'ai pourtant un second probleme, en mettant <contacts_index_index translate="label"> mon formulaire apparait bien en plus sur la page contact mais en mettant

<spaceVendor_index_index translate="label"> j'ai une erreur Fatal error: Call to a member function setFormAction() on a non-object

Merci
#19
bluewolf Le 18/09/2010 à 00:08
Avais le même problème
Tourné en rond pendant une semaine...
Comme dab' : une erreur de syntaxe (une majuscule pour une minuscule dans le xml du layout!)
Mais je ne parviens quand même pas à envoyer le mail: message d'erreur affiché...
GRRR!

Un conseil: utilisez une typo à empattement dans votre éditeur, ça permet de bien mieux faire la différence entre majuscule et minuscule... entre j nim (avec le point) et j maj (sans la barre dessus... pas facile!)
#20
bluewolf Le 19/09/2010 à 19:36
addendum:
a Xid: vérifiez bien la concordance entre le nom (<block...name="blablaForm" template="blabla/form.phtml"/>) du fichier blabla.xml du layout (dans /design/base pour mage 1.4), l'id et le nom (<form action=... id="blablaForm" name="blablaForm" method="post">) de la form du fichier form.phtml de template et le getBlock de la fonction indexAction() (... $this->getLayout()->getBlock('blablaForm'))...) du ficher IndexController.php dans /controllers/ du module.

Pour le problème de non envoi de mail avec une exception générée:
soit manque de la ligne anti-spam: <input type="text" name="hideit" id="hideit" value="" style="display:none !important;" /> dans form.phtml
soit (pour moi), une erreur de correspondance entre le nom d'un champ requis dans mon formulaire et les boucles de contrôle de ces champs dans IndexController.php (...if (!Zend_Validate::is(trim($post['nomdechamp']) , 'NotEmpty')) {$error = true;}...)-> s'il test un champs "age" par exemple et que celui-ci n'existe pas dans mon fiormulaire, il sera forcément toujours vide, donc non envoi du mail et exception. (erreur particulièrement fréquente lors du copier-coller de bouts de code => trucs en plus ou en moins)

Donc pour résumer:
ce tuto fonctionne avec Mage 1.4.1.1 et la majorité des problèmes rencontrés (sauf exception...) sont dûs à des erreurs de code souvent générés par l'adaptation de celui-ci à votre besion (changement du nom du module,etc..)

Autre conseil d'un novice qui se soigne: activez les logs dans Système->Configuration->Développeur->Paramètres de logs

Et un grand merci à l'équipe Magentix pour ce tuto et ce que celui-ci m'a apporté en compréhension! ;)

ps: si j'ai faux sur un truc, merci de le signaler...
#21
worth Le 05/10/2010 à 13:32
1000 Merci pour ce super tuto!
#22
amar Le 15/11/2010 à 05:33
Bonjour,

je galère depuis deux jours sur ce bug:

Fatal error: Class 'Mage_Googlebase_Helper_Data' not found in /homez.168/eamar/www/app/Mage.php on line 520


Le fichier Mage/Googlebase/Helper/Data.php existe bien!

Ce bug est survenu aprés la modification du fichier config.php de google-base juste pour rajouter la zone France

Besoin de vos lumières.
#23
Novice Le 25/11/2010 à 11:52
Bonjour,

Merci pour le tuto. Très instructif.

Juste une question. Serait-il possible d'insérer les données récupérées par le formulaire dans la base de données?
#24
hatem Le 11/01/2011 à 11:02
Bonjour,
c'est un très bon tuto, j'ai suivi tous les étapes ci dessus, le front-office et suite a l'adresse /index.php/brochure m'affiche la formulaire, mais dans le back-office et quand je clic sur brochure du menu left il m'affiche Accès refusé et le menu gauche disparu !!!

c'est quoi le problème ?
merci
#25
Tarek Le 11/01/2011 à 15:03
Bonjour,
Ce un beau tuto, mais il y a un problème dans la partie backoffice "Access denied" la version de magento 1.4.1.1

Merci d'avance
#26
gassara mahmoud Le 25/03/2011 à 23:46
comment tester ce module sur un serveur local svp je veut l'url?
#27
Vincent Le 18/04/2011 à 14:16
Bonjour,

tout d'abord, merci pour ce tuto, il m'a permis de comprendre un peu plus la logique Magento que je commence à découvrir.
J'ai suivi le tuto à la lettre, en conservant pour le moment les conventions de nommage. Le Magento sur lequel je travaille est en version 1.4.2.0.

Au niveau de l'affichage sur le site en lui même, le formulaire s'affiche correctement, j'ai pu rajouter les champs que je souhaitais, mais à l'envoi du mail, j'obtiens l'erreur suivante : "Impossible d'envoyer votre demande. Veuillez réessayer plus tard."

Voici la sortie du fichier de log :
exception 'Exception' with message 'This letter cannot be sent.' in /(...)/app/code/core/Mage/Core/Model/Email/Template.php:328
Stack trace:
#0 /(...)/app/code/core/Mage/Core/Model/Email/Template.php(437): Mage_Core_Model_Email_Template->send('vincent....', NULL, Array)
#1 /(...)/app/code/local/Magentix/Brochure/controllers/IndexController.php(56): Mage_Core_Model_Email_Template->sendTransactional('brochure_email_...', 'Pavillon', 'vincent....', NULL, Array)
#2 /(...)/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Magentix_Brochure_IndexController->postAction()
#3 /(...)/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(253): Mage_Core_Controller_Varien_Action->dispatch('post')
#4 /(...)/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#5 /(...)/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#6 /(...)/app/Mage.php(596): Mage_Core_Model_App->run(Array)
#7 /(...)/index.php(80): Mage::run('', 'store')
#8 {main}

Je vois bien qu'une exception a été levée, mais pour la résoudre, là je sèche..

Un autre problème qui entraîne probablement le premier : dans l'administration, j'ai bien vu le commentaire de tiagop mais je ne comprend pas vraiment la démarche "et mettre dedans le noeud et son contenu". Je suis effectivement en "acces denied" sur la page de configuration du module.

Quelqu'un a t'il des pistes pour résoudre ces problèmes ?

D'avance merci,
Vincent
#28
Vincent Le 18/04/2011 à 14:21
Arf, j'étais passé un peu trop vite sur le commentaire de bluewolf... Il me manquait le champ caché.
Je reste cependant preneur pour une explication sur le commentaire de tiagop.
#29
rebk Le 30/05/2011 à 09:35
Super tuto ça marche nickel !!
par contre je voudrais changer le nom également pour en faire plusieurs différents, j'ai bien compris que je devais changer le nom brochure par mon nouveau nom en respectant la casse, mais je n'ai pas compris dans ton explication le coup de Aze à la place de magentix (et en plus apparemment on le remplace pas partout ?...)

"Le nom du dossier contenant le module devient : app/code/local/Aze/FormulairePro/
- Le nom des classes sera :
Aze_FormulairePro_Helper_Data
Aze_FormulairePro_IndexController"

pourquoi il faut mettre Aze comme nom de dossier et de classe ?

merci de ton aide et dton super tuto !!
#30
Magentix Le 30/05/2011 à 09:39
Il s'agit en fait du nom du contributeur. Lorsque je développe un module pour Magentix j'indique naturellement "Magentix". Les agences Web indiquent généralement le nom de leur boîte.
Si ton dossier de contribution se nomme "Rebk" par exemple, ensemble des classes de ton module débuterons par "Rebk_"
#31
Tom Le 01/06/2011 à 23:10
No funciona en Versión Magento 1.5.1.0
#32
Rebk Le 02/06/2011 à 09:00
ok ok merci Magentix !!
#33
CafFrap Le 30/08/2011 à 18:07
Bonjour,

Pour ceux qui souhaitent mettre en place ce module sur un Magento 1.5.x.x. il y a deux petites modifications à faire par rapport au tutoriel :

1) déplacer les fichiers app/design/frontend/default/default/layout/brochure.xml et app/design/frontend/default/default/template/brochure/form.phtm respectivement dans app/design/frontend/base/default/layout/brochure.xml et app/design/frontend/base/default/template/brochure/form.phtm

2) Créer un fichier app/code/local/Magentix/Brochure/etc/adminhtml.xml, ouvrir le fichier app/code/local/Magentix/Brochure/etc/config.xml, copier tout le code '<adminhtml>...</adminhtml>' dans app/code/local/Magentix/Brochure/etc/adminhtml.xml puis rajouter les balises '<?xml version="1.0"?><config>' tout en haut et '</config>' tout en bas.

Une fois ces deux choses faites, le module devrait bien apparaître en front comme en back-office.

Par contre, j'aimerais pour mon cas spécifique pouvoir avoir plusieurs formulaires pour ce même module : Donc, avoir plusieurs onglets dans le backoffice où je pourrais spécifier les expéditeurs des mails envoyés en fonction des différents formulaires, et avoir plusieurs formulaires en front utilisant éventuellement des layouts ou des templates différents, accessibles depuis des URLs différentes.

J'ai essayé en vain de dupliquer certaines parties des fichiers XML là où ça me paraissait pertinent mais ça ne fonctionne pas...
Quelqu'un aurait-t-il une solution ou du moins serait capable de m'aiguiller ?
#34
Nicolas Le 20/09/2011 à 13:42
Bonjour!
est ce qu'il est compatible avec la version 1.6.0.0 ?
Merci
#35
Cléo Le 02/10/2011 à 12:18
Bonjour,

J'ai réussi à installer le module sur la version 1.5.1.0 et j'en ai même crée deux (contact presse et assistance téléphonique) mais suite à une migration sur un nouveau serveur, les url ne fonctionnent plus (www.monsite.com/contact-presse et www.monsite.com/assistance-telephonique).
Je ne vois pas pourquoi les url ne fonctionnent plus.
J'ai pu penser que c'était dû au "tiret" mais ça marchait avant. Même en repassant sur www.monsite.com/presse, ça ne fonctionne toujours pas.

Auriez-vous une idée du prolème ?
#36
Cléo Le 03/10/2011 à 02:17
Magento 1.5.1.0

Finalement j'ai réussi à recréer proprement mes deux formulaires à partir de zéro en reprenant point par point.
Les tirets fonctionnent, il FAUT FAIRE ATTENTION à la casse si vous mettez des MAJUSCULES par endroit.

@CafFrap
Je n'ai pas eu besoin de mettre mes templates dans base/default, je les laisse dans mon package.
J'ai crée les fichiers adminhtml mais je n'ai pas vérifié si ça fonctionnait sans eux.
#37
Jym Le 26/10/2011 à 13:43
Bonjour,

Je teste aussi ce tutoriel bien fait mais j'ai le meme probleme que Xid : Fatal error: Call to a member function setFormAction() on a non-object in au niveau de l'appel du block brochureForm je presume.

Je suis en local avec Wamp sur magento 1.6.1.0. J'ai bien les parametrage dans l'admin.

J'ai rajouté du code dans la methode getBlock de layout.php pour voir ce qu'il m'appel et il m'appel bien le bon nom de block : brochureForm.

J'ai verifié les noms dans les divers fichier et tout correspond sans que ça resolve le probleme.

J'ai mis les fichiers dans base plutot que default sinon ça marchait pas du tout.

Je ne vois plus du tout ce qui peu bloquer l'appel de l'object puisqu'il me dit que ce n'est pas un object...

Merci d'avance...
#38
Jym Le 26/10/2011 à 14:00
Oops, déjà resolu : vider le cache /var/cache :-s, désolé...Encore merci Magentix puisque tu parles deja de cette solution au dessus!
#39
Shoner Le 07/11/2011 à 11:33
Bonjour je viens juste adapter ce tuto a une version 1.5.1.0, je retrouve bien le formulaire sur le front et dans l'admin, mais mon problème est lors de l'envoi du mail, pas de message d'erreur le mail ne part pas et je me retrouve avec "Impossible d'envoyer votre demande. Veuillez réessayer plus tard."
donc tout se passe bien jusqu'au passage dans " app/code/local/Magentix/Cotation/controllers/IndexController.php "

je peux poster mes fichiers modifiés si besoin.

vous avez une idée ?

merci d'avance.
#40
Shoner Le 07/11/2011 à 13:13
J'ai solutionné mon problème ! très bon tuto !
#41
Ju Le 07/11/2011 à 15:31
Bonjour,

Super tuto, fonctionne sans aucune modification sur Magento 1.6.0.0.
J'aurai aimé rediriger l'utilisateur vers une autre page (sans avoir à créer une page de type CMS, car je vais avoir besoin de traduire la phrase de remerciement qui sera affichée) juste après la soumission du formulaire.

C'est ce que j'ai tenté de faire dans club.xml en ajoutant un block :
<block type="core/template" name="clubValid" template="club/valid.phtml"/>
J'ai créé le fichier clubValid.phtml au même endroit que clubForm.phtml

Ensuite, dans IndexController.php, j'ai ajouté ce code là à la fin du traitement du formulaire (dans la fonction postAction()), après l'envoie du mail validé :
$this->loadLayout();
$this->getLayout()->getBlock('clubValid');
$this->renderLayout();

Malgré tout cela, je tombe sur une page blanche, à l'URL suivante : index.php/club/index/post/

Quelqu'un saurai-t-il m'expliquer ce que je fait de mal ? ^_^'

Merci d'avance.

Ju
#42
Ju Le 07/11/2011 à 16:11
Aaaaah !
J'ai trouvé, il fallait juste ajouter dans le fichier xml du layout un cas pour la page de "post"...
#43
Mary Le 07/01/2012 à 08:04
Bonjour,

I followed all the steps and brochure form worked perfect , but then after a while I saw that it no longer appears to configure in the backend, and when I put in backend : administrator / security / Add Secret Key to URLs to NO, disappearances totally brochure backend and frontend brochure form send this message
Fatal error: Class 'Mage_Brochure_Helper_Data' not found in / home / myweb / miwebusuario / app / Mage.php on line 520

I googled but can not find an answer, could you help me?
#44
Tata Suzanne Le 18/01/2012 à 13:52
Salut,

J'ai tenté par deux fois d'installer ce module. Rien à faire, rien n'apparait dans le frontend ou le backoffice. Je n'y comprends plus rien. J'ai déjà tout essayé : renommer, avec l'original, etc.... Rien n'y fait.
Je suis sous Magento 1.5.0.1

Quelqu'un a déjà rencontré ce problème ?
D'avance merci

Tata
#45
Rédiger un commentaire

Cliquez pour générer un nouveau code

* champs obligatoires