juancho300000 Posted October 1, 2019 Share Posted October 1, 2019 Hola compañer@s, soy nuevo en prestashop y me han salido unos problemillas que no consigo solucionar. He creado un override class FrontController extends FrontControllerCore { public function init() { parent::init(); if ($this->php_self != 'authentication' && !$this->context->customer->isLogged() && $this->php_self != 'password') { Tools::redirect('index.php?controller=authentication?back=my-account'); } } } que funciona perfecto en el home, a modo de tienda privada, le doy a crear cuenta nueva, relleno los datos, le doy a guardar y me sale este error SyntaxError: Unexpected end of JSON input si quito el override funciona perfecto, la intención es que una vez creada la cuenta funcione con normalidad pero me esta volviendo loco... Link to comment Share on other sites More sharing options...
juancho300000 Posted October 1, 2019 Author Share Posted October 1, 2019 uso la versión 1.7.6.1, que se me olvidó ponerlo Link to comment Share on other sites More sharing options...
Prestafan33 Posted October 1, 2019 Share Posted October 1, 2019 No puedes hacer un override del init() del FrontController, ya que ese controlador se utiliza para muchas cosas (entre ellas peticiones AJAX y carga de recursos), y si cada vez que se va a utilizar ese controlador y se inicializa haces una redirección, es normal que te salga cualquier tipo de error. Concretamente, el error que comentas supongo que es porque alguna petición AJAX espera un JSON y le estás haciendo una redirección. Pero vamos, que podrían ser un montón más de errores, porque el planteamiento que usas es incorrecto. Link to comment Share on other sites More sharing options...
juancho300000 Posted October 1, 2019 Author Share Posted October 1, 2019 me imagino que es asi, es lo que encuentro investigando por ahi, lo que necesito es que la pagina funcione como privada, que aparezca el login o crear cuenta al inicio, que con eso funciona bien, pero a la hora de crear la cuenta me da ese error, cualquier consejo o ayuda será bien recibida Link to comment Share on other sites More sharing options...
JoellFleming Posted October 1, 2019 Share Posted October 1, 2019 https://petdogsworld.com/ Link to comment Share on other sites More sharing options...
Prestafan33 Posted October 1, 2019 Share Posted October 1, 2019 (edited) 58 minutes ago, juancho300000 said: me imagino que es asi, es lo que encuentro investigando por ahi, lo que necesito es que la pagina funcione como privada, que aparezca el login o crear cuenta al inicio, que con eso funciona bien, pero a la hora de crear la cuenta me da ese error, cualquier consejo o ayuda será bien recibida Yo lo haría editando las vistas , por ejemplo en el header.tpl. Comprobar ahí si el usuario está logueado, y si no es así, redirigirle a la página de login o hacer lo que se quiera (lo ideal sería crear un pop-up para loguearse y mostrarlo) . Edited October 1, 2019 by Prestafan33 (see edit history) Link to comment Share on other sites More sharing options...
juancho300000 Posted October 1, 2019 Author Share Posted October 1, 2019 Just now, Prestafan33 said: Yo lo haría editando las vistas , por ejemplo en el header.tpl. Comprobar ahí si el usuario está logueado, y si no es así, redirigirle a la página de login o hacer lo que se quiera (lo ideal sería crear un pop-up para loguearse y mostrarlo) . si el caso es que ahora funciona perfectamente, pero al crear una cuenta, al darle guardar, salta el error y no guarda, la redireccion es correcta, eso funciona pero no se porqué al final salta ese error Link to comment Share on other sites More sharing options...
juancho300000 Posted October 1, 2019 Author Share Posted October 1, 2019 mira aqui, e intenta crear una cuenta https://marketresaledesarrollo.es Link to comment Share on other sites More sharing options...
Prestafan33 Posted October 1, 2019 Share Posted October 1, 2019 (edited) A ver, el error de planteamiento es que no puedes extender el FrontController para que haga una redirección en el método "init", ya que ese método se ejecuta cada vez que se crea un objeto de esa clase, y además todos los controladores de Prestashop descienden de esa clase, y esos controladores se utilizan para todas las operaciones de la tienda, algunas de ellas son cargar archivos CSS, Javascript o recibir y resolver peticiones AJAX. Por tanto, si les colocas una redirección en medio gran parte de las operaciones van a producir errores y no van a funcionar como deben. Normalmente te funciona porque una vez que el usuario se ha logueado ya la redirección no se produce, pero hablando claro, es una chapuza, y hay altísimas probabilidades de que falle al producir cualquier operación importante de la tienda. Por poner un símil, es como si estuvieras cortando y poniendo un desvío en medio de una carretera para enviar por un camino de cabras bicicletas. La bicicleta pasará, pero por la misma carretera vendrán coches y camiones que se quedarán atascados en medio del camino, porque por ahí no pueden pasar. Pues es lo que estás haciendo. Edited October 1, 2019 by Prestafan33 (see edit history) Link to comment Share on other sites More sharing options...
juancho300000 Posted October 1, 2019 Author Share Posted October 1, 2019 5 minutes ago, Prestafan33 said: A ver, el error de planteamiento es que no puedes extender el FrontController para que haga una redirección en el método "init", ya que ese método se ejecuta cada vez que se crea un objeto de esa clase, y además todos los controladores de Prestashop descienden de esa clase, y esos controladores se utilizan para todas las operaciones de la tienda, algunas de ellas son cargar archivos CSS, Javascript o recibir y resolver peticiones AJAX. Por tanto, si les colocas una redirección en medio gran parte de las operaciones van a producir errores y no van a funcionar como deben. Normalmente te funciona porque una vez que el usuario se ha logueado ya la redirección no se produce, pero hablando claro, es una chapuza, y hay altísimas probabilidades de que falle al producir cualquier operación importante de la tienda. Por poner un símil, es como si estuvieras cortando y poniendo un desvío en medio de una carretera para enviar por un camino de cabras bicicletas. La bicicleta pasará, pero por la misma carretera vendrán coches y camiones que se quedarán atascados en medio del camino, porque por ahí no pueden pasar. Pues es lo que estás haciendo. muy bien, lo entiendo, ¿me puedes ayudar? Link to comment Share on other sites More sharing options...
Prestafan33 Posted October 1, 2019 Share Posted October 1, 2019 Si quieres extender la clase FrontController, yo haría esto: class FrontController extends FrontControllerCore { public $auth = true; } No hace falta nada más. Link to comment Share on other sites More sharing options...
juancho300000 Posted October 2, 2019 Author Share Posted October 2, 2019 13 hours ago, Prestafan33 said: Si quieres extender la clase FrontController, yo haría esto: class FrontController extends FrontControllerCore { public $auth = true; } No hace falta nada más. muchas gracias por tu ayuda y entiendo lo que me quieres decir, a veces las soluciones pueden ser mas sencillas de lo que uno piensa, te agradezco muchisimo el esfuerzo de contestarme e intentar ayudarme, gracias. He puesto eso quitando lo anterior y aunque funciona perfecto en lo que es mostrarse, a la hora de crear la cuenta pasa exactamente lo mismo al llegar al boton y darle a guardar "SyntaxError: Unexpected end of JSON input", he borrado la caché y nada, si quito el override funciona perfecto, me hace la cuenta sin problema, la verdad es que es un poco frustante Link to comment Share on other sites More sharing options...
juancho300000 Posted October 2, 2019 Author Share Posted October 2, 2019 algo que me ayudaria seria saber cual es la zona o pagina que termina el registro porque por lo que estoy viendo la ultima parte ni es autentificación ni nada que reconozca, por eso da ese error, porque en la página donde tiene que finalizar el guardado la redirecciona antes de entrar Link to comment Share on other sites More sharing options...
juancho300000 Posted October 2, 2019 Author Share Posted October 2, 2019 bueno, al final pude solucionar en 1.7.6 y es volviendo a poner lo mismo que al principio, lo que me dijiste que no era correcto pero ahora funciona perfecto añadiendo un par de preguntas al if override/classes/controllers/FrontController.php public function init() { parent::init(); if (!$this->context->customer->isLogged() && Tools::getValue('controller') != 'authentication' && $this->php_self != 'password' && !Tools::isSubmit('create_account') && Tools::getValue('controller') != 'contact' && !Tools::isSubmit('submitCreate')) { Tools::redirect('index.php?controller=authentication?back=my-account'); } } lo de contact es porque ademas de login hay un buzon de sugerencias que si no pongo eso me redirecciona antes de entrar, ahora todo funciona bien y no da errores ninguno. no he encontrado otra manera de poder hacerlo, si se te ocurre alguna manera, estaré encantado de aprenderlo gracias Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now