Ajouter un nouveau formulaire accessible depuis le frontend
- Par Magentix le 01/01/2010
- Difficulté : 4/4
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.
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.
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.
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,
<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)
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
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.
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
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
Pour Magento 1.4.0.1 il n'y aura aucun problème ;)
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
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
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"
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.
Je vais voir ce que j'ai fait de faux, mais si vous avez une piste...
Merci quand même ;-)
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!
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
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!)
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...
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.
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?
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
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
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
Je reste cependant preneur pour une explication sur le commentaire de tiagop.
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 !!
Si ton dossier de contribution se nomme "Rebk" par exemple, ensemble des classes de ton module débuterons par "Rebk_"
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 ?
est ce qu'il est compatible avec la version 1.6.0.0 ?
Merci
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 ?
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.
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...
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.
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
J'ai trouvé, il fallait juste ajouter dans le fichier xml du layout un cas pour la page de "post"...
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?
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