Jump to content
kary83

[Solucionado] Formulario de contacto duplicado no funciona

Recommended Posts

Buenos días,

 

Estoy intentando duplicar el formulario de contacto porque tengo que tener dos diferentes y no puedo comprar un módulo para ello.

 

Hasta ahora lo que he hecho es lo que he encontrado en diferentes mensajes de este foro (en español e inglés):

 

He duplicado y renombrado tres archivos:

/contact-form.php -> distribuidor-form.php

/controles/front/ContactControler.php -> /controllers/front/DistribuidorController.php

/themes/mitema/contact-form.tpl -> /themes/mitema/distribuidor-form.tpl

 

Después he entrado eh distribuidor-form.php y he modificado la línea de la ruta poniendo contorller=ditribuidor

 

En el DitribuidorController.php he cambiado tres líneas:

El nombre de la clase: class DistribuidorControllerCore extends FrontController

La variable pública: public $php_self = 'distribuidor';

La dirección del tpl: $this->setTemplate(_PS_THEME_DIR_.'distribuidor-form.tpl');

 

Por último añado un enlace en la página que me lleve a index.php?controller=distribuidor. También he probado a poner en el enlace {$link->getPageLink('distribuidor.php', true)} con igual resultado

 

Más adelante haré los cambios en la base de datos y mail para que se registre y envíe correos, pero antes pruebo que funcione... No funciona....elimino el class_index.php de la caché y el formulario de contacto sigue funcionando bien pero cuando le doy al enlace para abrir el formulario de distribuidor me sale "404 página no encontrada"

 

La verdad es que por más vueltas que doy no encuentro donde está el error, he comprobado que esté bien escrito distribuidor en todas partes (pues a veces parece que tengo un poco de dislexia e intercambio letras) y está bien, no se si es que me falta algo por cambiar...

 

Muchas gracias de antemano!

Edited by ventura (see edit history)

Share this post


Link to post
Share on other sites

Sobre duplicar el contact-form de prestashop no puedo decirte, nunca lo he hecho, pero Victor tiene una guia de como crear una página php en prestashop:

 

http://victor-rodenas.com/2012/10/20/guia-crear-nueva-pagina-con-php-en-prestashop-1-5/

 

A la página que te crees de esta manera podrias añadirle un formulario html y enviar los datos del formulario mediante otro archivo .php, no es muy complicado y por internet hay guias de como hacerlo.

Share this post


Link to post
Share on other sites

Gracias por responder FranciscoVillén,

 

He estado mirando lo que me has pasado y básicamente es lo mismo, solo que los tres archivos (los dos php y el tpl) que he usado han sido una copia de los archivos de contact-form para tener ya implementado todo el tema del envío de emails) pero los cambio principales son los que indica el tutorial que me mandas.

 

El problema viene al hacer eso y probar sale 404 :(

 

Muchas gracias

Share this post


Link to post
Share on other sites

Hola, utilizo Prestashop 1.6 y a mi también me interesa.

 

Lo de crear página de Victor da problemas, no se si es por la versión.

 

Necesito tener 2 "Contacte con nosotros" uno al lado del otro para que lo pueda modificar para transformarlo en "Peticiones" (de trabajo). Creo que es muy básico y me he vuelto loco buscando por el foro y no hay solución a esto. Y comprar el modulo de la tienda no es la solución a un problema tan sencillo.

Share this post


Link to post
Share on other sites

Para duplicar el contact form en la version 1.6 solo hay que clonar estos archivos

controllers/front/ContactController.php --> controllers/front/ContactDUPLICADOController.php

themes/mi_tema/contact-form.tpl ---> themes/mi_tema/contactDUPLICADO-form.tpl

 
 

tambien es conveniente clonar dependiendo de la plantilla y demas 

themes/mi_tema/js/contact-form.js ---> themes/mi_tema/contactDUPLICADO-form.js

themes/mi_tema/css/contact-form.css ---> themes/mi_tema/contactDUPLICADO-form.css

En el controlador editamos:

class ContactDUPLICADOControllerCore extends FrontController
{
	public $php_self = 'contactDUPLICADO';
	public $ssl = true;

linea 257 aprox

$this->setTemplate(_PS_THEME_DIR_.'contactDUPLICADO-form.tpl');

linea 213 aprox

public function setMedia()
	{
		parent::setMedia();
		$this->addCSS(_THEME_CSS_DIR_.'contactDUPLICADO-form.css');
		$this->addJS(_THEME_JS_DIR_.'contactDUPLICADO-form.js');
		$this->addJS(_PS_JS_DIR_.'validate.js');
	}

Buscamos la pagina en 

PREFERENCES /  SEO & URLS / ContactDUPLICADO

y editamos el titulo y la url

 

 

 

Importante antes de probar eliminar el 

cache/class_index.php
Edited by ventura (see edit history)
  • Like 2

Share this post


Link to post
Share on other sites

He intentado hacer eso y no me aparece la URL.

He hecho y comprobado 2 veces lo que has puesto y nada. He eliminado el class_index, he limpiado el cache y todo y nada...

(Si no me equivoco te falta una ele a controller en el php de la primera linea que das.)

¿Por qué no funciona?

Edited by chessrecipes (see edit history)

Share this post


Link to post
Share on other sites

He intentado hacer eso y no me aparece la URL.

He hecho y comprobado 2 veces lo que has puesto y nada. He eliminado el class_index, he limpiado el cache y todo y nada...

(Si no me equivoco te falta una ele a controller en el php de la primera linea que das.)

¿Por qué no funciona?

Cierto, editado lo de la L en el controller

 

Donde no te aparece la pagina en 

PREFERENCES /  SEO & URLS / 

¿?

 

Añadiendola tampoco te aparece en default pages ¿?

  • Like 2

Share this post


Link to post
Share on other sites

Vale. Edito. Ahora lo veo. Debo añadirla para que aparezca.

 

Y ahora funciona la página y la URL como el de Contacto pero ¿Cómo lo habilito para que salga al lado del formulario de Contacto original? Ahora mismo es "oculta".

 

También estaría bien tener la posibilidad de crear campos/asuntos diferentes a los ya existenes y que se pudiera gestionar desde el back office. ¿Como se haría todo esto?

Edited by chessrecipes (see edit history)

Share this post


Link to post
Share on other sites

Siento ser tan torpe ventura. te agradezco el esfuerzo de veras.

¿En qué linea coloco "{include file=$tpl_dir./contactDUPLICADO-form.tpl}"? Es que no para de darme error de sintaxis.

 

Utilizo Prestashop 1.6. ¿Hay alguna forma de crear una gestion sencilla como lo de Clientes -> Contacto? ¿Se podría crear lo mismo (Clientes -> ContactoDUPLICADO)?

Share this post


Link to post
Share on other sites

Creo que te entendí mal , lo que te puse era para mostrar ambos formularios en la misma pagina del front-office.

para hacer lo que quieres hay que tocar bastante codigo, es una adaptacion complicada

Share this post


Link to post
Share on other sites

Entiendo. Y para hacerlo en la misma pagina del front-office, simplemente con que me apereciera lo de ContactoDUPLICADO al lado de Contacte con nosotros me conformaría. ¿Como se haría? ¿En que linea añado el codigo que me has dado?

Share this post


Link to post
Share on other sites

Como lo quierés hacer ¿?,  que aparezca un enlace o boton al contactDUPLICADO-form  en el contact-form ¿? o que aparezca el formulario duplicado tal cual debajo del otro ¿?

 

-Para poner un enlace o boton al nuevo formulario utilizar esto en el tpl

<a href="{$link->getPageLink('contactDUPLICADO')|escape:'html':'UTF-8'}" title="{l s='ContactDUPLICADO'}">{l s='ContactDUPLICADO'}</a>

- Para lo dos formularios juntos, el codigo de antes y se incluiría el contenido del .tpl del otro formulario, no sé si funcionará 

{include file="$tpl_dir./contactDUPLICADO-form.tpl"}

- Para que aparezca uno al lado del otro. deberás crear un div que tenga un width 100% que contenga un div con cada formulario e include con width 50%

 

 

Nada,  para que funcione lo del include habría que renombrar clases en el controlador nuevo, validacion y renombrar las classes del tpl nuevo para que no se incompatibilicen, bastante lio, se muestra pero no funciona bien a la hora de enviar

Edited by ventura (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Simplemente duplicar el botón de "Contacta con nosotros" para llamarlo "Peticiones" para que la gente pida lo que necesite que no tiene nada que ver con quejas, sugerencias etc...

Entonces sería tener otro botón de "Contacta con nosotros" y otro formulario pero con el mismo diseño y que tenga como Asunto: Peticiones.

 

Veo que es más complicado de lo que creía...

 

Me he quedado en la creación de los 4 archivos con los códigos. "Para poner un enlace o boton al nuevo formulario utilizar esto en el tpl <a href="{$link->getPageLink('contactDUPLICADO')|escape:'html':'UTF-8'}" title="{l s='ContactDUPLICADO'}">{l s='ContactDUPLICADO'}</a>" ¿En que línea lo debería poner? Pruebo en diferentes lineas y no me aparece el botón.

Edited by chessrecipes (see edit history)

Share this post


Link to post
Share on other sites

Colocalo despues del boton de enviar y dependiendo de la plantilla te debería aparecer al lado de este


 <div class="submit form-group">
            <button type="submit" name="submitMessage" id="submitMessage" class="button-1 fill">{l s='Send'}</button>
<span class="botonDUPLICADO"><a href="{$link->getPageLink('contactDUPLICADO')|escape:'html':'UTF-8'}" title="{l s='ContactDUPLICADO'}">{l s='ContactDUPLICADO'}</a></span> 
</div>

 

De esta manera lo podrás editar y mover luego con css en el global css o archivo principal de estilos de tu plantilla

 

 

Asi por ejemplo:

.botonDUPLICADO a:hover {
    color: #ffffff!important;
    background: #666666;
}
.botonDUPLICADO a {
    margin-left: 20px;
    border: 2px solid #666666;
    padding: 10px;
    font-family: georgia;
    font-style: italic;
    color: #666666;
}
Edited by ventura (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

(Utilizo Prestashop 1.6 Version por defecto).

Imagino que hablamos siempre de modificar el tpl. El problema es que se crean botones dentro de la página de contacto.

Yo quiero el boton en la página principal para dar acceso a ello.

Share this post


Link to post
Share on other sites

Vale, tienes que ir a esta ruta

themes/default-bootstrap/modules/blockcontact/nav.tpl

Y editar esta parte

<div id="contact-link">
<a href="{$link->getPageLink('contact', true)|escape:'html':'UTF-8'}" title="{l s='Contact Us' mod='blockcontact'}">{l s='Contact Us' mod='blockcontact'}</a>
</div>

Y dejarla asi:

<div id="contact-link">
<a href="{$link->getPageLink('contact', true)|escape:'html':'UTF-8'}" title="{l s='Contact Us' mod='blockcontact'}">{l s='Contact Us' mod='blockcontact'}</a>
</div>
<div  class="header_user_info">
<a href="{$link->getPageLink('contactDUPLICADO')|escape:'html':'UTF-8'}" title="{l s='ContactDUPLICADO'}">{l s='ContactDUPLICADO' mod='blockcontact'}</a>
</div>
  • Like 1

Share this post


Link to post
Share on other sites

Vale gracias, ya tengo el botón.

Ahora solo queda maquillarlo.

1) No me sale traducido, me sale en inglés. ¿Como lo añado a traducciones?

2) Tengo una columna izquierda. ¿Como la elimino en esta única pagina? En contacte con nosotros no hay ninguna columna. La columna izquierda que sale siempre por defecto está desactivada. He probado a añadir excepciones en la pagina contactDUPLICADO de los modulos que aparecen pero no funciona, no se me van ocultando.

3) ¿Hay forma de cambiar los asuntos? Me salen los mismos que en Contacte con nosotros y me gustaría que fueran otros.

 

Con esto ya tendríamos todos los pasos necesarios luego pongo un recopilatorio que esta pregunta la he visto mucho y sin respuesta.

Share this post


Link to post
Share on other sites

- Para traducirlo desde localización/ traducciones/ traducciones de los modulos instalados/ blockcontact

 

-Si en los modulos que tienes en la columna izquierda añades como excepcion la nueva pagina de formulario de contacto creada esta ocupara todo el espacio, 

 

- Los asuntos te refieres al select con los contactos (websmaster ...) ¿?  son los mismos si,  puedes crear más y quizas con un condicional hacer que aparezcan unos u otros

  • Like 1

Share this post


Link to post
Share on other sites

-Para las traducciones tuve que ampliar el número de campos para enviar un formulario. Tenía una restriccion. Sólo he podido cambiar el título del home. Pero no puedo cambiar lo de dentro. (Enviar un mensaje etc, etc...) ¿Lo podría cambiar manualmente?

 

-Añado como excepción ContactDUPLICADO y no hace efecto. Sigue apareciendo los modulos en la columna izquierda. Me permite ordenarlos por lo que son esos módulos pero no me funciona lo de excepción.

 

-Sobre los asuntos, ¿como se crearía un condicional para que unos aparecieran en un sitio pero no en otro?

 

Un saludo.

Edited by chessrecipes (see edit history)

Share this post


Link to post
Share on other sites

-Para la ampliación de campos en las traducciones tienes muchos post de informacion en el foro

 

http://www.prestashop.com/forums/topic/235573-max-input-vars-1000-solved/

 

 

- Revisa que estés aplicando correctamente la excepción

Modulos / posiciones de los modulos / modificar / Excepciones

- Tambien  puedes ocultar la columna desde

PREFERENCIAS /  TEMAS / default-bootstrap / MODIFICAR / APARIENCIA DE LAS COLUMNAS

Para lo de los contactos sería utilizando la variable de los contactos en el select, asi por ejemplo se ocultaría el contacto con id 1

 

  <select id="id_contact" class="form-control" name="id_contact">
                        <option value="0">{l s='-- Choose --'}</option>
                        {foreach from=$contacts item=contact}
{if $contact.id_contact != 1}
                            <option value="{$contact.id_contact|intval}" {if isset($smarty.request.id_contact) && $smarty.request.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'html':'UTF-8'}</option>
                         {/if}
{/foreach}
                    </select>
Edited by ventura (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

 

- Tambien  puedes ocultar la columna desde

PREFERENCIAS / TEMAS / default-bootstrap / MODIFICAR / APARIENCIA DE LAS COLUMNAS

Perfecto. Eso era. Ya ha quedado desactivado.

 

 

Para lo de los contactos sería utilizando la variable de los contactos en el select, asi por ejemplo se ocultaría el contacto con id 1

 

  <select id="id_contact" class="form-control" name="id_contact">

                        <option value="0">{l s='-- Choose --'}</option>

                        {foreach from=$contacts item=contact}

{if $contact.id_contact != 1}

                            <option value="{$contact.id_contact|intval}" {if isset($smarty.request.id_contact) && $smarty.request.id_contact == $contact.id_contact}selected="selected"{/if}>{$contact.name|escape:'html':'UTF-8'}</option>

                         {/if}

{/foreach}

                    </select>

 

Fabuloso. Así era también. He conseguido desactivar una ID. ¿Como desactivo la 1,2,3 y 4? He intentado añadiendo numeros y nada.

 

 

Con saber quitar 4 IDs en vez de 1 y la traducción ya estaría. Lo de los campos ya lo he habilitado y pude cambiar el título pero no me deja cambiar lo de dentro. El problema que creo que hay es que utiliza el blockcontact y aparece como ya traducido pero realmente no lo está. Ya no queda nada. Mil gracias a ventura.

Share this post


Link to post
Share on other sites

Para que no te aparezcan mas campos asi

{if $contact.id_contact != 1 || $contact.id_contact != 2  || $contact.id_contact != 3  || $contact.id_contact != 4 }

Para que aparezcan solo los que tu quierás, asi

{if $contact.id_contact == 1 || $contact.id_contact == 2  || $contact.id_contact == 3  || $contact.id_contact  == 4 }

Lo de las traducciones mira aqui, para buscarlo utiliza el control+f para habilitar el buscador del navegador

DEFAULT-BOOTSTRAP - NAV

Share this post


Link to post
Share on other sites

Perfecto. Ya tengo sólo el asunto que yo quería.

 

Lo de las traducciones cambié el DEFAULT-BOOTSTRAP - NAV y es que sólo salen 3 campos para traducir y que ya están traducidos que son:

-Contact Us

-Call us now:

-ContactDUPLICADO

 

Pero cuando pincho el boton de ContactDuplicado que ahora esta traducido al nombre que yo quiero, en el formulario del mail sale: "send a message, subject heading, email address..." y es que he intentado buscar estos campos y no me aparecen.

Share this post


Link to post
Share on other sites

Si, eso lo tienes que traducir desde traducciones del frontoffice, buscando la pagina ContactDuplicado te apareceran todos los campos del tpl

Share this post


Link to post
Share on other sites

Hola, lo tengo perfecto muchas gracias , solo qu eno me sale la url amigable qu epuse en seo yurl, le puse concurso y la

url  seria por ejemplo www.ejemplo.com/concurso ye redirige correctamente al formulario nuevo creado, pero en la direccion arriba sale www.ejemplo.com/index.php?controller=contactDUPLICADO

alguna solucion para que sea amigable, he borrado htaccses  y demas

Share this post


Link to post
Share on other sites

Otra pregunta , es posible crear otro correo , para este contacto duplicado

si  en el que  viene por defecto envia el correo contact_form.html

crear otro correo por ejemplo  precio_form.html y que se envie este

donde habria que  poner el codigo , para que enviae el nuevo vorreo creado

Gracias

Share this post


Link to post
Share on other sites

En el controlador duplicado, busca esto:

 

if (empty($contact->email))
Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, null, null, $fileAttachment);
else
{
if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]',
$var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''),
$fileAttachment) ||
!Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, $contact->email, $contact->name, $fileAttachment))
$this->errors[] = Tools::displayError('An error occurred while sending the message.');
}
}
 
 
Sustituye el texto en color rojo por el nombre del nuevo correo creado

Share this post


Link to post
Share on other sites

Ok, me ha quedado perfecto, inclusoelcambio de asunto y a ququien va dirijido el correo a servivio al cliente o al nueno vcntacto creado, Solo me quedaria saber, si logico, el nuevo correo que hecreado , lo  recibe el cliente, hay alguna forma de que yo reciba otro correo que no sea el e servicio al  cliente es decir , crear otro correo mas y que  cuando pregunte en ese nuevo ontact form  a la vez que l erecibe el nuevovo creado, yo reciba tambien otro, nuevo , que no sea el mimo de qu ehe recibido un correo de atencion alcliente, no se si m eexplico. Gracias

Share this post


Link to post
Share on other sites

Hola Ventura hice la modificacion que dijiste y esta perfecto, recibo el nuevo correo ,creado,

Es posible , tambien qu eaparte de que el cliente reciba el nuevo corrreo, yo reciba otro nuevo , que no sea el de contact.html

gracias

Share this post


Link to post
Share on other sites

Hola Ventura hice la modificacion que dijiste y esta perfecto, recibo el nuevo correo ,creado,

Es posible , tambien qu eaparte de que el cliente reciba el nuevo corrreo, yo reciba otro nuevo , que no sea el de contact.html

gracias

 

 

En principio debería funcionar cambiando el texto de color rojo por el nombre de la plantilla nueva de correo

 

if (empty($contact->email))
Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, null, null, $fileAttachment);
else
{
if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]',
$var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''),
$fileAttachment) ||
!Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s'), $ct->id, $ct->token) : Mail::l('Your message has been correctly sent')), $var_list, $from, null, $contact->email, $contact->name, $fileAttachment))
$this->errors[] = Tools::displayError('An error occurred while sending the message.');
}
}
  • Like 1

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More