· Publicado por Sergio Baixauli en: Magento
Etiquetas: contact form, forms in magento, formulario de contacto, magento Para el segundo formulario vamos a necesitar la siguiente estructura de ficheros: Este artículo se basa en uno que encontré en francés en esta página.
* app/code/local/Magentix/Brochure/controllers/IndexController.php * app/code/local/Magentix/Brochure/Helper/Data.php * app/code/local/Magentix/Brochure/etc/config.xml * app/code/local/Magentix/Brochure/etc/system.xml * app/design/frontend/default/default/layout/brochure.xml * app/design/frontend/default/default/template/brochure/form.phtml * app/locale/es_ES/Magentix_Brochure.csv * app/locale/es_ES/template/email/brochure_form.html * app/etc/modules/Magentix_Brochure.xml
Respetando su nomenclatura original, el módulo se llamará Brochure y Magentix será su contenedor. Es una buena forma de organizar nuestras extensiones. Lo primero, el contenido de los ficheros. Este en concreto es el nucleo del formulario. Se encarga de recoger los valores y enviarlos. Muestra mensajes con el resultado.- 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 ($error) throw new Exception();
- $mailTemplate = Mage::getModel('core/email_template');
- /* @var $mailTemplate Mage_Core_Model_Email_Template */
- /* 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,
- );
- 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('*/*/');
- }
- }
- }
Alguna función que nos pueda ayudar a la hora de autocompletar el formulario, como por ejemplo el nombre de usuario si estuviera logado.
- 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();
- }
- }
Fichero de configuracion. La única parte que "podemos" tocar de aquí es la línea de "frontName". En el ejemplo pone brochure, lo que significa que si queremos acceder al formulario la url será http://www.mipagina.com/brochure Para cambiar esta url, cambiamos esto --> brochure por esto otro contacto2 y ya está
- 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>
- <resources>
- <brochure_setup>
- <setup>
- <module>Mage_Brochure</module>
- </setup>
- <connection>
- <use>core_setup</use>
- </connection>
- </brochure_setup>
- </resources>
- <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>
El fichero system.xml pinta la configuración de la extensión en el administrador. Adjunto una captura para que podáis relacionar los campos y ver como quedan después.
- app/code/local/Magentix/Brochure/etc/system.xml
- <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>
Ahora el estilo del formulario (1 columna, dos columnas, etc.)
- 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>page/2columns-right.phtml</template></action>
- <action method="setHeaderTitle" translate="title" module="brochure"><title>Brochure</title></action>
- </reference>
- <reference name="content">
- <block type="core/template" name="brochureForm" template="brochure/form.phtml"/>
- </reference>
- </brochure_index_index>
- </layout>
Pintamos el formulario y añadimos / modificamos los campos a nuestro gusto...
- app/design/frontend/default/default/template/brochure/form.phtml
- <form action="<?php echo $this->getFormAction(); ?>" id="brochureForm" method="post">
- <div class="input-box">
- <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">
- <input name="telephone" id="telephone" title="<?php echo $this->__('Telephone') ?>" value="" class="input-text" type="text" />
- </div>
- <div class="button-set">
- </div>
- </form>
- <script type="text/javascript">
- var magazineForm = new VarienForm('brochureForm', true);
- </script>
Indicamos las traducciones para los campos de nuestro formulario. Si añadimos más hay que tocar este fichero
- app/locale/es_ES/Magentix_Brochure.csv
- "* Required Fields","* Champs obligatoires"
- "Submit","Envoyer"
- "Name","Nom"
- "Address","Adresse"
- "Telephone","Telephone"
El template para los campos del email. Esto es lo que recibirá el correo que configuremos. Lo mismo que con el anterior, si añadimos nuevos campos habrá que tocar también este fichero. OJO con este fichero, guardarlo en UTF-8!
- app/locale/es_ES/template/email/brochure_form.html
- <!--@subject Solicitud de info@-->
- Nombre : {{var data.name}}
- Dirección: {{var data.address}}
- Teléfono: {{var data.telephone}}
Y por fín el último fichero
- app/etc/modules/Magentix_Brochure.xml
- <?xml version="1.0"?>
- <layout version="0.1.0">
- <default></default>
- <brochure_index_index>
- <reference name="root">
- <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
- <action method="setHeaderTitle" translate="title" module="brochure"><title>Brochure</title></action>
- </reference>
- <reference name="content">
- <block type="core/template" name="brochureForm" template="brochure/form.phtml"/>
- </reference>
- </brochure_index_index>
- </layout>
Bueno, pues con esto, y todo ha ido bien, tendremos una nueva opción en nuestro administrador desde donde podremos configurar el envío de correos a través de un nuevo formulario.
Compartir:








Loading... 


Twitter
Gabriel #
20 de Noviembre de 2009 a las 16:24