<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>onestic &#187; contact form</title>
	<atom:link href="http://onestic.com/tag/contact-form/feed/" rel="self" type="application/rss+xml" />
	<link>http://onestic.com</link>
	<description>blog de onestic</description>
	<lastBuildDate>Thu, 02 Feb 2012 09:40:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Formularios de contacto en Magento</title>
		<link>http://onestic.com/formularios-de-contacto-en-magento/</link>
		<comments>http://onestic.com/formularios-de-contacto-en-magento/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 07:00:43 +0000</pubDate>
		<dc:creator>Sergio Baixauli</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[contact form]]></category>
		<category><![CDATA[forms in magento]]></category>
		<category><![CDATA[formulario de contacto]]></category>
		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://onestic.com/?p=379</guid>
		<description><![CDATA[En una de nuestras últimas tiendas nos hemos encontrado con el problema de necesitar dos formularios de contacto diferentes al mismo tiempo. Uno para el contacto y otro para recoger información muy específica del usuario. Hasta la fecha, Magento no tiene una forma sencilla de resolver este problema. Hay gente que pasa del core de [...]]]></description>
			<content:encoded><![CDATA[En una de nuestras últimas tiendas nos hemos encontrado con el problema de necesitar dos formularios de contacto diferentes al mismo tiempo. Uno para el contacto y otro para recoger información muy específica del usuario. Hasta la fecha, Magento no tiene una forma sencilla de resolver este problema.
Hay gente que pasa del core de Magento e implementa una página en PHP para el envío del segundo formulario. Es una opción&#8230; nosotros vamos a crear una nueva extensión para el envío de correos y además añadiremos campos personalizados.

Una vez activado el envío de formularios desde el administrador, nuestra tienda dispondrá de una página de contacto para que nuestros clientes se pongan en contacto con nosotros. Si no habéis tocado nada, dicho formulario lo podemos encontrar en www.mitienda.com/contacts
<p style="padding-left: 30px;">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 <a href="http://www.magentix.fr/modules-magento/module-ajout-formulaire-frontend-magento.html">página.</a></p>

<p style="padding-left: 30px;">* 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</p>
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.

<pre class="brush: php; title: ;">
app/code/local/Magentix/Brochure/controllers/IndexController.php

&lt;?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-&gt;norouteAction();
        }
    }

    public function indexAction() {
        $this-&gt;loadLayout();
        $this-&gt;getLayout()-&gt;getBlock('brochureForm')-&gt;setFormAction( Mage::getUrl('*/*/post') );

        $this-&gt;_initLayoutMessages('customer/session');
        $this-&gt;_initLayoutMessages('catalog/session');
        $this-&gt;renderLayout();
    }

    public function postAction() {
        $post = $this-&gt;getRequest()-&gt;getPost();
        if ($post) {
            $translate = Mage::getSingleton('core/translate');
            /* @var $translate Mage_Core_Model_Translate */
            $translate-&gt;setTranslateInline(false);
                        
            try {
                $postObject = new Varien_Object();
                $postObject-&gt;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-&gt;setDesignConfig(array('area' =&gt; 'frontend'))
                    /* L'adresse de réponse est ici l'adresse de l'expéditeur définie dans l'administration */
                    -&gt;setReplyTo(Mage::getStoreConfig(self::XML_PATH_EMAIL_SENDER))
                    -&gt;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' =&gt; $postObject)
                    );

                if (!$mailTemplate-&gt;getSentSuccess()) {
                    throw new Exception();
                }

                $translate-&gt;setTranslateInline(true);

                Mage::getSingleton('customer/session')-&gt;addSuccess(Mage::helper('brochure')-&gt;__('Your inquiry was submitted'));
                                
                $this-&gt;_redirect('*/*/');

                return;
            } catch (Exception $e) {
                $translate-&gt;setTranslateInline(true);

                Mage::getSingleton('customer/session')-&gt;addError(Mage::helper('brochure')-&gt;__('Unable to submit your request. Please, try again later'));
                $this-&gt;_redirect('*/*/');
                return;
            }

        } else {
            $this-&gt;_redirect('*/*/');
        }
    }
}

</pre>

Alguna función que nos pueda ayudar a la hora de autocompletar el formulario, como por ejemplo el nombre de usuario si estuviera logado.

<pre class="brush: php; title: ;">
app/code/local/Magentix/Brochure/Helper/Data.php

&lt;?php

class Magentix_Brochure_Helper_Data extends Mage_Core_Helper_Abstract {
    public function getUserName() {
        if (!Mage::getSingleton('customer/session')-&gt;isLoggedIn()) return '';

        $customer = Mage::getSingleton('customer/session')-&gt;getCustomer();
        return trim($customer-&gt;getLastname());
    }
}

</pre>

Fichero de configuracion. La única parte que &#8220;podemos&#8221; tocar de aquí es la línea de &#8220;frontName&#8221;. 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 &#8211;> brochure   por esto otro contacto2  y ya está

<pre class="brush: xml; title: ;">
app/code/local/Magentix/Brochure/etc/config.xml

&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;config&gt;
        &lt;modules&gt;
                &lt;Magentix_Brochure&gt;
                        &lt;version&gt;1.0&lt;/version&gt;
                &lt;/Magentix_Brochure&gt;
        &lt;/modules&gt;
        &lt;frontend&gt;
                &lt;routers&gt;
                        &lt;brochure&gt;
                                &lt;use&gt;standard&lt;/use&gt;
                                &lt;args&gt;
                                        &lt;module&gt;Magentix_Brochure&lt;/module&gt;
                                        &lt;frontName&gt;brochure&lt;/frontName&gt;
                                &lt;/args&gt;
                        &lt;/brochure&gt;
                &lt;/routers&gt;
                &lt;translate&gt;
                        &lt;modules&gt;
                                &lt;Magentix_Brochure&gt;
                                    &lt;files&gt;
                                        &lt;default&gt;Magentix_Brochure.csv&lt;/default&gt;
                                    &lt;/files&gt;
                                &lt;/Magentix_Brochure&gt;
                        &lt;/modules&gt;
                &lt;/translate&gt;
                &lt;layout&gt;
                    &lt;updates&gt;
                        &lt;brochure&gt;
                            &lt;file&gt;brochure.xml&lt;/file&gt;
                        &lt;/brochure&gt;
                    &lt;/updates&gt;
                &lt;/layout&gt;
        &lt;/frontend&gt;
        &lt;global&gt;
                &lt;resources&gt;
                    &lt;brochure_setup&gt;
                        &lt;setup&gt;
                            &lt;module&gt;Mage_Brochure&lt;/module&gt;
                        &lt;/setup&gt;
                        &lt;connection&gt;
                            &lt;use&gt;core_setup&lt;/use&gt;
                        &lt;/connection&gt;
                    &lt;/brochure_setup&gt;
                &lt;/resources&gt;
                &lt;helpers&gt;
                    &lt;brochure&gt;
                        &lt;class&gt;Magentix_Brochure_Helper&lt;/class&gt;
                    &lt;/brochure&gt;
                &lt;/helpers&gt;
                &lt;template&gt;
                    &lt;email&gt;
                        &lt;brochure_email_email_template translate=&quot;label&quot; module=&quot;brochure&quot;&gt;
                            &lt;label&gt;Brochure Form&lt;/label&gt;
                            &lt;file&gt;brochure_form.html&lt;/file&gt;
                            &lt;type&gt;text&lt;/type&gt;
                        &lt;/brochure_email_email_template&gt;
                    &lt;/email&gt;
                &lt;/template&gt;
        &lt;/global&gt;
        &lt;adminhtml&gt;
                &lt;translate&gt;
                    &lt;modules&gt;
                        &lt;Magentix_Brochure&gt;
                            &lt;files&gt;
                                &lt;default&gt;Magentix_Brochure.csv&lt;/default&gt;
                            &lt;/files&gt;
                        &lt;/Magentix_Brochure&gt;
                    &lt;/modules&gt;
                &lt;/translate&gt;
                &lt;acl&gt;
                    &lt;resources&gt;
                        &lt;admin&gt;
                            &lt;children&gt;
                                &lt;system&gt;
                                    &lt;children&gt;
                                        &lt;config&gt;
                                            &lt;children&gt;
                                                &lt;brochure translate=&quot;title&quot; module=&quot;brochure&quot;&gt;
                                                    &lt;title&gt;Brochure Section&lt;/title&gt;
                                                &lt;/brochure&gt;
                                            &lt;/children&gt;
                                        &lt;/config&gt;
                                    &lt;/children&gt;
                                &lt;/system&gt;
                            &lt;/children&gt;
                        &lt;/admin&gt;
                &lt;/resources&gt;
                &lt;/acl&gt;
        &lt;/adminhtml&gt;
        &lt;default&gt;
                &lt;brochure&gt;
                    &lt;brochure&gt;
                        &lt;enabled&gt;1&lt;/enabled&gt;
                    &lt;/brochure&gt;
                    &lt;email&gt;
                        &lt;recipient_email&gt;&lt;![CDATA[hello@example.com]]&gt;&lt;/recipient_email&gt;
                        &lt;sender_email_identity&gt;custom2&lt;/sender_email_identity&gt;
                        &lt;email_template&gt;brochure_email_email_template&lt;/email_template&gt;
                    &lt;/email&gt;
                &lt;/brochure&gt;
        &lt;/default&gt;
&lt;/config&gt;

</pre>

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.

<a href="http://onestic.com/wp-content/uploads/2009/10/form-contact.jpg"><img class="alignnone size-full wp-image-400" title="form-contact" src="http://onestic.com/wp-content/uploads/2009/10/form-contact.jpg" alt="form-contact" width="575" height="294" /></a>

<pre class="brush: xml; title: ;">
app/code/local/Magentix/Brochure/etc/system.xml

&lt;config&gt;
    &lt;sections&gt;
        &lt;brochure translate=&quot;label&quot; module=&quot;brochure&quot;&gt;
            &lt;label&gt;Brochure&lt;/label&gt;
            &lt;tab&gt;general&lt;/tab&gt;
            &lt;frontend_type&gt;text&lt;/frontend_type&gt;
            &lt;sort_order&gt;101&lt;/sort_order&gt;
            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
            &lt;groups&gt;
                &lt;brochure translate=&quot;label&quot;&gt;
                    &lt;label&gt;Accept our brochure&lt;/label&gt;
                    &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                    &lt;sort_order&gt;10&lt;/sort_order&gt;
                    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                    &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                    &lt;fields&gt;
                        &lt;enabled translate=&quot;label&quot;&gt;
                            &lt;label&gt;Enable Brochure&lt;/label&gt;
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_yesno&lt;/source_model&gt;
                            &lt;sort_order&gt;10&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                        &lt;/enabled&gt;
                    &lt;/fields&gt;
                &lt;/brochure&gt;
                &lt;email translate=&quot;label&quot;&gt;
                    &lt;label&gt;Email Options&lt;/label&gt;
                    &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                    &lt;sort_order&gt;50&lt;/sort_order&gt;
                    &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                    &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                    &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                    &lt;fields&gt;
                        &lt;recipient_email translate=&quot;label&quot;&gt;
                            &lt;label&gt;Send Emails To&lt;/label&gt;
                            &lt;frontend_type&gt;text&lt;/frontend_type&gt;
                            &lt;sort_order&gt;10&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                        &lt;/recipient_email&gt;
                        &lt;sender_email_identity translate=&quot;label&quot;&gt;
                            &lt;label&gt;Email Sender&lt;/label&gt;
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_email_identity&lt;/source_model&gt;
                            &lt;sort_order&gt;20&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                        &lt;/sender_email_identity&gt;
                        &lt;email_template translate=&quot;label&quot;&gt;
                            &lt;label&gt;Email Template&lt;/label&gt;
                            &lt;frontend_type&gt;select&lt;/frontend_type&gt;
                            &lt;source_model&gt;adminhtml/system_config_source_email_template&lt;/source_model&gt;
                            &lt;sort_order&gt;30&lt;/sort_order&gt;
                            &lt;show_in_default&gt;1&lt;/show_in_default&gt;
                            &lt;show_in_website&gt;1&lt;/show_in_website&gt;
                            &lt;show_in_store&gt;1&lt;/show_in_store&gt;
                        &lt;/email_template&gt;
                    &lt;/fields&gt;
                &lt;/email&gt;
            &lt;/groups&gt;
        &lt;/brochure&gt;
    &lt;/sections&gt;
&lt;/config&gt;

</pre>

Ahora el estilo del formulario (1 columna, dos columnas, etc.)

<pre class="brush: xml; title: ;">
app/design/frontend/default/default/layout/brochure.xml

&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;layout version=&quot;0.1.0&quot;&gt;
        &lt;default&gt;&lt;/default&gt;
        &lt;brochure_index_index&gt;
                &lt;reference name=&quot;root&quot;&gt;
                        &lt;action method=&quot;setTemplate&quot;&gt;&lt;template&gt;page/2columns-right.phtml&lt;/template&gt;&lt;/action&gt;
                        &lt;action method=&quot;setHeaderTitle&quot; translate=&quot;title&quot; module=&quot;brochure&quot;&gt;&lt;title&gt;Brochure&lt;/title&gt;&lt;/action&gt;
                &lt;/reference&gt;
                &lt;reference name=&quot;content&quot;&gt;
                        &lt;block type=&quot;core/template&quot; name=&quot;brochureForm&quot; template=&quot;brochure/form.phtml&quot;/&gt;
                &lt;/reference&gt;
        &lt;/brochure_index_index&gt;
&lt;/layout&gt;

</pre>

Pintamos el formulario y añadimos / modificamos los campos a nuestro gusto&#8230;

<pre class="brush: php; title: ;">
app/design/frontend/default/default/template/brochure/form.phtml

&lt;div id=&quot;messages_product_view&quot;&gt;&lt;?php echo $this-&gt;getMessagesBlock()-&gt;getGroupedHtml() ?&gt;&lt;/div&gt;

&lt;form action=&quot;&lt;?php echo $this-&gt;getFormAction(); ?&gt;&quot; id=&quot;brochureForm&quot; method=&quot;post&quot;&gt;

   &lt;div class=&quot;input-box&quot;&gt;
      &lt;label for=&quot;name&quot;&gt;&lt;?php echo $this-&gt;__('Name') ?&gt; &lt;span class=&quot;required&quot;&gt;*&lt;/span&gt;&lt;/label&gt;&lt;br /&gt;
      &lt;input name=&quot;name&quot; id=&quot;name&quot; title=&quot;&lt;?php echo $this-&gt;__('Name') ?&gt;&quot; value=&quot;&lt;?php echo $this-&gt;htmlEscape(Mage::helper('brochure')-&gt;getUserName()) ?&gt;&quot; class=&quot;required-entry input-text&quot; type=&quot;text&quot; /&gt;
   &lt;/div&gt;

   &lt;div class=&quot;input-box&quot;&gt;
      &lt;label for=&quot;address&quot;&gt;&lt;?php echo $this-&gt;__('Address') ?&gt; &lt;span class=&quot;required&quot;&gt;*&lt;/span&gt;&lt;/label&gt;&lt;br /&gt;
      &lt;input name=&quot;address&quot; id=&quot;address&quot; title=&quot;&lt;?php echo $this-&gt;__('Address') ?&gt;&quot; value=&quot;&quot; class=&quot;required-entry input-text&quot; type=&quot;text&quot; /&gt;
   &lt;/div&gt;

   &lt;div class=&quot;input-box&quot;&gt;
      &lt;label for=&quot;telephone&quot;&gt;&lt;?php echo $this-&gt;__('Telephone') ?&gt; &lt;/label&gt;&lt;br /&gt;
      &lt;input name=&quot;telephone&quot; id=&quot;telephone&quot; title=&quot;&lt;?php echo $this-&gt;__('Telephone') ?&gt;&quot; value=&quot;&quot; class=&quot;input-text&quot; type=&quot;text&quot; /&gt;
   &lt;/div&gt;

    &lt;div class=&quot;button-set&quot;&gt;
        &lt;p class=&quot;required&quot;&gt;&lt;?php echo $this-&gt;__('* Required Fields') ?&gt;&lt;/p&gt;
        &lt;button class=&quot;form-button&quot; type=&quot;submit&quot;&gt;&lt;span&gt;&lt;?php echo $this-&gt;__('Submit') ?&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;/div&gt;
&lt;/form&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
   var magazineForm = new VarienForm('brochureForm', true);
&lt;/script&gt;

</pre>

Indicamos las traducciones para los campos de nuestro formulario. Si añadimos más hay que tocar este fichero

<pre class="brush: php; title: ;">
app/locale/es_ES/Magentix_Brochure.csv

"* Required Fields","* Champs obligatoires"
"Submit","Envoyer"
"Name","Nom"
"Address","Adresse"
"Telephone","Telephone"

</pre>

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. <strong>OJO con este fichero, guardarlo en UTF-8!</strong>

<pre class="brush: php; title: ;">

app/locale/es_ES/template/email/brochure_form.html

&lt;!--@subject Solicitud de info@--&gt;

Nombre : {{var data.name}}

Dirección: {{var data.address}}

Teléfono: {{var data.telephone}}

</pre>

Y por fín el último fichero

<pre class="brush: xml; title: ;">
app/etc/modules/Magentix_Brochure.xml

&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;layout version=&quot;0.1.0&quot;&gt;
        &lt;default&gt;&lt;/default&gt;
        &lt;brochure_index_index&gt;
                &lt;reference name=&quot;root&quot;&gt;
                        &lt;action method=&quot;setTemplate&quot;&gt;&lt;template&gt;page/2columns-right.phtml&lt;/template&gt;&lt;/action&gt;
                        &lt;action method=&quot;setHeaderTitle&quot; translate=&quot;title&quot; module=&quot;brochure&quot;&gt;&lt;title&gt;Brochure&lt;/title&gt;&lt;/action&gt;
                &lt;/reference&gt;
                &lt;reference name=&quot;content&quot;&gt;
                        &lt;block type=&quot;core/template&quot; name=&quot;brochureForm&quot; template=&quot;brochure/form.phtml&quot;/&gt;
                &lt;/reference&gt;
        &lt;/brochure_index_index&gt;
&lt;/layout&gt;

</pre>

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.]]></content:encoded>
			<wfw:commentRss>http://onestic.com/formularios-de-contacto-en-magento/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

