Jump to content

Redirect a página CMS después de registrarse Prestashop [solucionado]


noranova

Recommended Posts

Buenos dias, escribo porque después de darle muchísimas vueltas al tema no he encontrado ninguna solución.

 

Mi web está configurada de forma que cuando un usuario se registra no tiene acceso a su cuenta directamente, yo, desde la administración tengo que "aceptar" a éste nuevo usuario.

 

Por lo tanto me gustaría que cuando un usuario se registrase apareciera un mensaje (contenido de una página CMS). Ya que ahora, cuando un usuario se registra vuelve a aparecer la página de registro.

 

Por más que pruebo y busco no encuentro. Principalmente, las opciones que más se repiten en foros es: 

 

En el fichero : /controllers/front/MyAccountController.php

 

Modificar: public $authRedirection = 'my-account';

 

Por: public $authRedirection = 'index';

 

 

Esto lo que hace es que una vez esté LOGUEADO, te redirige a la pagina principal (no es lo que busco).

 

Otra cosa que probé fue cambiar directamente en AuthController.php los "Tools::redirect('index.php?controller=my-account');" por otros enlaces/ruta y tampoco funciona, ni da ningún error.

 

Si alguien pudiera orientarme un poco lo agradecería.

 

 

Saludos.

Edited by tecnico21.mkp
Moderación del foro añade la versión de Prestashop que usa el autor del tema al título del tema. (see edit history)
Link to comment
Share on other sites

Gracias por su rápida respuesta. He probado todas ellas ya y ninguna funciona, llevo varios días buscando información y probando cosas y ninguna me funciona. Me resulta raro porque creo que es algo que será habitual hacerlo y no pensaba que ésto supusiera algo tan "extraordinario". 

 

Seguiré investigando y si encuentro algo lo compartiré. Si alguien puede orientarme un poco también lo agradeceré.

Link to comment
Share on other sites

Escribo de nuevo para indicar que he encontrado el sitio y el código que hay que introducir para que redirija a OTRA web.

 

Resalto lo de otra, porque si pongo enlace a google por ejemplo sí me redirige, pero si lo pongo a alguna página CMS o directamente pongo la url de mi web, no realiza la redirección.

 

Os dejo el codigo y el lugar donde debe ir:

 

En mi versión, en la línea 648 encontramos el siguiente comentario: // if register process is in two steps, we display a message to confirm account creation

 

Justo debajo escribimos el siguiente código:

 

Tools::redirect('http://www.google.es');

 

Como comprobaréis a google funciona bien, el problema es al usar un enlace de mi propia web.

 

Como ya dije antes, si encuentro algo más lo compartiré. Espero que vosotros hagáis lo mismo :)

Link to comment
Share on other sites

No funcionó :(

 

Lo que más cerca ha estado de funcionar, aunque no lo ha hecho finalmente, ha sido lo siguiente:

 

$cmsvalid = CMS(8);

$linkvalid ->getCmsLink($cmsvalid);

Tools::redirect($linkvalid);

 

 

Falta poco, pero no se porqué no funciona.

 

Gracias de nuevo.

Link to comment
Share on other sites

Tampoco hay suerte con eso:

 

$validacion = new link();
Tools::redirect($validacion->getCMSLink('8','null'));
 
Se queda en la página de registro. 
 
Lo que si he conseguido es que me muestre la ruta de la web correcta con la url amigable, pero la página me sale en blanco.
Si copio la url resultante y la copio en una pestaña nueva si que me abre la página CMS.
 
Muchas gracias.
Link to comment
Share on other sites

Como te he comentado, yo en principio he comprobado esto:

$nadie= new Link();
Tools::redirect($nadie->getCMSLink('id_cms', 'null'));

y me redirecciona al "CMS". (Lo he probado con Prestashop 1.6.0.9)

 

Adjunta como has dejado el código.

 

Recuerda que en la linea que mencionas tienes un "if" (ahora mismo (como deje el mundo prestashop hace mucho tiempo no se si es donde indicas) que realmente si no se abre ni se cierra, solo esta afectando a la primera linea, si quieres que el if afecte a mas lineas tendras que abrirlo y cerrarlo.

Edited by nadie (see edit history)
Link to comment
Share on other sites

Así tengo el código. La versión que utilizo es la 1.5.3.1.

 

El código lo tengo antes del IF, debería afectar a todo. 

 

// if register process is in two steps, we display a message to confirm account creation

//$cmsvalid = CMS(8);
//$linkvalid->getCmsLink($cmsvalid);
//Tools::redirect('index.php?controller=cms&id_cms=8');
Tools::redirect($nadie->getCMSLink('8', 'null'));
if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE'))
$this->context->cookie->account_created = 1;
$customer->logged = 1;
$this->context->cookie->email = $customer->email;
$this->context->cookie->is_guest = !Tools::getValue('is_new_customer', 1);
// Update cart address
$this->context->cart->secure_key = $customer->secure_key;
}
Link to comment
Share on other sites

 

Así tengo el código. La versión que utilizo es la 1.5.3.1.

 

El código lo tengo antes del IF, debería afectar a todo. 

 

// if register process is in two steps, we display a message to confirm account creation

//$cmsvalid = CMS(8);
//$linkvalid->getCmsLink($cmsvalid);
//Tools::redirect('index.php?controller=cms&id_cms=8');
Tools::redirect($nadie->getCMSLink('8', 'null'));
if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE'))
$this->context->cookie->account_created = 1;
$customer->logged = 1;
$this->context->cookie->email = $customer->email;
$this->context->cookie->is_guest = !Tools::getValue('is_new_customer', 1);
// Update cart address
$this->context->cart->secure_key = $customer->secure_key;
}

 

Me cuelo, 

 

¿Pero no tienes el objeto creado antes:

$nadie= new Link();

en el codigo que has pegado? ¿no?

 

¿Si colocas las dos lineas al final antes del ultimo 

}

no hace nada?

Link to comment
Share on other sites

Sigue sin hacer nada. Ésta es la url que resulta: midominio.es/index.php?controller=authentication.

 

Para confirmarlo todo, no vaya a ser que sea un error tonto. En PREFERENCIAS > CMS tengo creada una página y su ID es el 8.

 

Antes, cuando me ha pillado algo ha sido de PREFERENCIAS > SEO Y URL No se si ahí tendría que crear algo más.

Link to comment
Share on other sites

Así tengo el código. La versión que utilizo es la 1.5.3.1.[/size]

Linea 576 de tu version de Prestashop tienes esto: (Me acabo de bajar la 1.5.3.1 para ver el fichero)

 

// if registration type is in two steps, we redirect to register address
							if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
								Tools::redirect('index.php?controller=address');
							if ($back = Tools::getValue('back'))
								Tools::redirect($back);
							Tools::redirect('index.php?controller=my-account');

Si lo dejas asi:

 

// if registration type is in two steps, we redirect to register address
							if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
								Tools::redirect('index.php?controller=address');
							if ($back = Tools::getValue('back'))
								Tools::redirect($back);
							$nadie= new Link();
Tools::redirect($nadie->getCMSLink('id_cms', 'null'));

Adjunto Imagen

post-123440-0-44564300-1418301224_thumb.png

Edited by nadie (see edit history)
Link to comment
Share on other sites

Sigue mostrando la página para registrarse de nuevo.

 

Copio el código.

// Avoid articles without delivery address on the cart
							$this->context->cart->autosetProductAddress();

							Hook::exec('actionCustomerAccountAdd', array(
									'_POST' => $_POST,
									'newCustomer' => $customer
								));
							if ($this->ajax)
							{
								$return = array(
									'hasError' => !empty($this->errors),
									'errors' => $this->errors,
									'isSaved' => true,
									'id_customer' => (int)$this->context->cookie->id_customer,
									'id_address_delivery' => $this->context->cart->id_address_delivery,
									'id_address_invoice' => $this->context->cart->id_address_invoice,
									'token' => Tools::getToken(false)
								);
								die(Tools::jsonEncode($return));
							}
							// if registration type is in two steps, we redirect to register address
							if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
								Tools::redirect('index.php?controller=address');
							if ($back = Tools::getValue('back'))
								Tools::redirect($back);
							/*Tools::redirect('index.php?id_cms=8&controller=cms');*/
							$nadie= new Link();
							Tools::redirect($nadie->getCMSLink('8', 'null'));
							// redirection: if cart is not empty : redirection to the cart
							if (count($this->context->cart->getProducts(true)) > 0)
								Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
							// else : redirection to the account
							else
								Tools::redirect('index.php?controller=my-account');
						}
					}
				}
			}
		}

Muchisimas gracias.


La tengo configurada con Estándar.

Link to comment
Share on other sites

Sigue mostrando la página para registrarse de nuevo.

 

Copio el código.

// Avoid articles without delivery address on the cart
							$this->context->cart->autosetProductAddress();

							Hook::exec('actionCustomerAccountAdd', array(
									'_POST' => $_POST,
									'newCustomer' => $customer
								));
							if ($this->ajax)
							{
								$return = array(
									'hasError' => !empty($this->errors),
									'errors' => $this->errors,
									'isSaved' => true,
									'id_customer' => (int)$this->context->cookie->id_customer,
									'id_address_delivery' => $this->context->cart->id_address_delivery,
									'id_address_invoice' => $this->context->cart->id_address_invoice,
									'token' => Tools::getToken(false)
								);
								die(Tools::jsonEncode($return));
							}
							// if registration type is in two steps, we redirect to register address
							if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
								Tools::redirect('index.php?controller=address');
							if ($back = Tools::getValue('back'))
								Tools::redirect($back);
							/*Tools::redirect('index.php?id_cms=8&controller=cms');*/
							$nadie= new Link();
							Tools::redirect($nadie->getCMSLink('8', 'null'));
							// redirection: if cart is not empty : redirection to the cart
							if (count($this->context->cart->getProducts(true)) > 0)
								Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
							// else : redirection to the account
							else
								Tools::redirect('index.php?controller=my-account');
						}
					}
				}
			}
		}
Muchisimas gracias.

 

La tengo configurada con Estándar.

 

 

En ese codigo que pegas, depende cambiar lo que he dicho, prueba cambiar el:

else
Tools::redirect('index.php?controller=my-account');
por

else { 
$nadie= new Link();
Tools::redirect($nadie->getCMSLink('2', 'null')); 
}
(Creo que anda por la linea 582)

 

Edito: Recuerdo que estamos haciendo pruebas sobre el fichero original, una vez que se compruebe que funcione, lo ideal es hacer un override xD

Edited by nadie (see edit history)
Link to comment
Share on other sites

Os copio de nuevo mi fichero, sigue sin funcionar! :( :(

// Avoid articles without delivery address on the cart
							$this->context->cart->autosetProductAddress();

							Hook::exec('actionCustomerAccountAdd', array(
									'_POST' => $_POST,
									'newCustomer' => $customer
								));
							if ($this->ajax)
							{
								$return = array(
									'hasError' => !empty($this->errors),
									'errors' => $this->errors,
									'isSaved' => true,
									'id_customer' => (int)$this->context->cookie->id_customer,
									'id_address_delivery' => $this->context->cart->id_address_delivery,
									'id_address_invoice' => $this->context->cart->id_address_invoice,
									'token' => Tools::getToken(false)
								);
								die(Tools::jsonEncode($return));
							}
							// if registration type is in two steps, we redirect to register address
							if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
								Tools::redirect('index.php?controller=address');
							if ($back = Tools::getValue('back'))
								Tools::redirect($back);
							/*Tools::redirect('index.php?id_cms=8&controller=cms');*/
							$nadie= new Link();
							Tools::redirect($nadie->getCMSLink('8', 'null'));
							// redirection: if cart is not empty : redirection to the cart
							if (count($this->context->cart->getProducts(true)) > 0)
								Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
							// else : redirection to the account
							else
								$nadie=new Link();
								Tools::redirect($nadie->getCMSLink('8', 'null')); 
								//Tools::redirect('index.php?controller=my-account');
						}
					}
				}
Link to comment
Share on other sites

Os copio de nuevo mi fichero, sigue sin funcionar! :( :(

// Avoid articles without delivery address on the cart
							$this->context->cart->autosetProductAddress();

							Hook::exec('actionCustomerAccountAdd', array(
									'_POST' => $_POST,
									'newCustomer' => $customer
								));
							if ($this->ajax)
							{
								$return = array(
									'hasError' => !empty($this->errors),
									'errors' => $this->errors,
									'isSaved' => true,
									'id_customer' => (int)$this->context->cookie->id_customer,
									'id_address_delivery' => $this->context->cart->id_address_delivery,
									'id_address_invoice' => $this->context->cart->id_address_invoice,
									'token' => Tools::getToken(false)
								);
								die(Tools::jsonEncode($return));
							}
							// if registration type is in two steps, we redirect to register address
							if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
								Tools::redirect('index.php?controller=address');
							if ($back = Tools::getValue('back'))
								Tools::redirect($back);
							/*Tools::redirect('index.php?id_cms=8&controller=cms');*/
							$nadie= new Link();
							Tools::redirect($nadie->getCMSLink('8', 'null'));
							// redirection: if cart is not empty : redirection to the cart
							if (count($this->context->cart->getProducts(true)) > 0)
								Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
							// else : redirection to the account
							else
								$nadie=new Link();
								Tools::redirect($nadie->getCMSLink('8', 'null')); 
								//Tools::redirect('index.php?controller=my-account');
						}
					}
				}

 

Esto:

 

else
$nadie=new Link();
Tools::redirect($nadie->getCMSLink('8', 'null')); 
//Tools::redirect('index.php?controller=my-account');

Ponlo asi:

 

else {
$nadie=new Link();
Tools::redirect($nadie->getCMSLink('8', 'null')); 
//Tools::redirect('index.php?controller=my-account');
 } 

Es un "else" con dos lineas, por lo tanto en principio tendrias que abrir corchete y cerrarlo.

 

Todo lo otro del fichero, dejalo como venia por defecto (es decir como venia originalmente)

 

(Recuerda que estamos haciendo una prueba, si funciona luego, haremos un override)

Edited by nadie (see edit history)
Link to comment
Share on other sites

Tampoco ha habido suerte....vaya tela!

Yo lo he probado con la 1.5.6.2 (y redireccionar redireccionaba), existe la posbilidad de que existan cambios en los ficheros entre versiones.

 

Si quieres puedes enviarme los datos de acceso por privado y intento ojear... a ver que te puede estar pasando.

 

O bajate team viewer y me conecto en remoto a tu equipo y intento mirarlo.

Link to comment
Share on other sites

He optado por volver a poner los ficheros por defecto, por si hubiera tocado algo que me estuviera afectando, y he modificado lo que más se ha acercado a lo que busco. En la linea 656, antes de cerrar el if. He añadido las siguientes lineas 

$cmsvalid = CMS(3);
		$linkvalid ->getCmsLink($cmsvalid);
		Tools::redirect($linkvalid);

Ponga el numero de CMS que ponga, la url a la que me redirige después de registrame es: index.php?controller=authentication

 

Authentication es el nombre de una página creada en Preferencias > SEO y URL. Lo que necesitaría es que ese authentication fuera sustituido por otro nombre. De forma que yo pueda crear una pagina nueva en SEO y URL y sustituirla por authentication.

Link to comment
Share on other sites

Yo lo ultimo que te he dicho en mi ultima respuesta es lo que me funciona en la 1.5.6.2, no voy a darle mas vueltas, te he ofrecido mi tiempo para conectarme en remoto a tu equipo para verlo, logicamente sin ningun coste.

 

Un saludo y disculpas por las molestias ocasionadas.

  • Like 2
Link to comment
Share on other sites

Me ha funcionado lo ultimo que ha comentado Nadie en sus respuestas: http://www.prestashop.com/forums/topic/387360-redirect-a-página-cms-después-de-registrarse-prestashop-1531/#entry1895851
 

$nadie= new Link();
Tools::redirect($nadie->getCMSLink('2', 'null'));

 
Muchas Gracias Nadie !
 
Funcionando en Prestashop 1.5.6

Edited by rafaelamargo (see edit history)
  • Like 1
Link to comment
Share on other sites

Me cuelo.

 

No se porque el autor del tema no quiere que el usuario Nadie, se conecte en remoto y pueda ayudarle de forma mas efectiva (Seria interesante saber porque no quiere, no veo yo nada malo en eso..)

 

Yo he probado por curiosidad lo que dice Nadie en la 1.5.6.2 (en sus ultimos mensajes), y tambien me funciona.

Edited by Sergio Ruiz (see edit history)
  • Like 1
Link to comment
Share on other sites

No me gusta dar accesos a terceros a sitios que no son míos si puedo solucionar yo de alguna forma el problema. No es nada personal con Nadie. Respecto al tema, es verdad que funciona. Lo he probado en prestashop 1.6 de la siguiente forma y funciona.

$nadie= new Link();
		Tools::redirect($nadie->getCMSLink('2', 'aviso-legal'));

Muchas gracias a todos, en especial a Nadie.

Link to comment
Share on other sites

No me gusta dar accesos a terceros a sitios que no son míos si puedo solucionar yo de alguna forma el problema. No es nada personal con Nadie. Respecto al tema, es verdad que funciona. Lo he probado en prestashop 1.6 de la siguiente forma y funciona.

$nadie= new Link();
		Tools::redirect($nadie->getCMSLink('2', 'aviso-legal'));

Muchas gracias a todos, en especial a Nadie.

 

¿Pero esa opcion no era lo que te comente que probaras  y comentastes que no te funcionaba?

 

¿Pero no era Prestashop 1.5.3.1 la version de Prestashop que me comentastes que usabas?

 

Un saludo y disculpas por las molestias ocasionadas.

Link to comment
Share on other sites

Buenas, de nuevo escribo ya que me he percatado de que el lugar en donde estoy poniendo el código no es el adecuado, ya que si los 

$customer->active = 1;

Los pongo a 0 para que el usuario no esté activado, no me redirige a la página CMS, por lo que supongo que habría que ponerlo dentro de algún if. Si alguien sabe algo al respecto..

 

Seguiré investigando y pondré la solución que encuentre.

 

Gracias y un saludo.

Link to comment
Share on other sites

Buenas, de nuevo escribo ya que me he percatado de que el lugar en donde estoy poniendo el código no es el adecuado, ya que si los 

$customer->active = 1;

Los pongo a 0 para que el usuario no esté activado, no me redirige a la página CMS, por lo que supongo que habría que ponerlo dentro de algún if. Si alguien sabe algo al respecto..

 

Seguiré investigando y pondré la solución que encuentre.

 

Gracias y un saludo.

 

Fijate que yo te dije el colocar el codigo en un sitio diferente a que lo habias puesto tu. ¿Lo has puesto en el "else" que te dije (solo en ese sitio)?

Link to comment
Share on other sites

Bueno pues ya lo tengo todo solucionado. Al final no me ha quedado otra que repasarme todo el código de principio a fin, entenderlo y probar.

 

Os explico el problema y la solución:

 

Lo que buscaba era que un usuario se registrara y al registrarse se mostrara un mensaje diciendo que su solicitud sería revisada, de forma que la cuenta no se activaba, debe hacerlo el administrador.

 

La solución (o mejor dicho mi solución) ha sido introducir el siguiente código en la línea 636 aproximadamente, dentro de protected function updateContext(Customer $customer) y antes del comentario // if register process is in two steps, we display a message to confirm account creatio:

$nadie= new Link();
		Tools::redirect($nadie->getCMSLink('8', 'validacion'));

También en algunas líneas arriba de el nuevo código hay un:

$this->context->cookie->logged = 1;

 

Cambiamos el valor y lo ponemos a 0:

$this->context->cookie->logged = 0;

 

Por último he cambiado todos los:

$customer->active = 1;

 

Por:

$customer->active = 0;

 

No se si habré sido demasiado "burro" con algo, pero así funciona sin problemas.

 

Gracias a todos los que habéis aportado. Un saludo.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...