Jump to content

[Solucionado] Utilizar archivo tpl para comprobar si el usuario esta logueado


flash2022

Recommended Posts

Hola a todos,

He estado mirando como poner una comprobación para saber si el usuario que entre en la tienda esta o no logueado y si es que no lo mande a la página de login, he encontrado esta funcion para insertar en un archivo tpl pero no se en que archivo debo ponerlo.

{if $logged}
    Logueado
{else}
    No Logueado
{/if}

Muchas gracias,

Xavi

 

Link to comment
Share on other sites

Hola Flash,

con respecto a tu pregunta, dos detalles:

1) Si tu versión de Prestashop es la 1.7 o superior, esa variable global no te sirve. Debes utilizar $customer.is_logged

2) Posicionar el código depende de lo que quieras hacer con la comprobación. Si se trata de redirigir al usuario automáticamente si no está loggeado debe situarse antes de que se carguen las cabeceras (headers) en la respuesta http, o bien en cualquier sitio siempre que uses un javascript para realizar la redirección.

De modo que tu mejor opción podría ser insertarlo en la parte superior de head.tpl (Directorio /templates/_partials/ de su theme) en caso de que lo tengas. Del mismo modo te digo que si lo haces por template, lo más sencillo va a ser que crees un pequeño javascript que haga una redirección, utilizando la variable javascript 'prestashop.urls.authentication' para conseguir la URL de la página de login.

 

Link to comment
Share on other sites

Hola Luis C,

Gracias por tu respuesta, si estoy utilizando una version superior, en concreto 1.7.8.2 , tomo nota de lo que me indicas.

Lo que quiero es poder reenviar a la pagina de login si alguien va directamente a ver algun producto o porque entre con una dirección que le haya quedado en el historial del navegador, sino está logueado le envie a la pagina de login para poder controlar quien accede a la tienda.

Miraré lo del head.tpl a ver si me funciona.

 

Gracias y saludos,

Xavi

 

 

Link to comment
Share on other sites

Hola de nuevo:

Si elaboras un poquito más quizás podamos llegar a un punto más concreto. ¿Quieres que CUALQUIER usuario que llegue a la web sea redireccionado al login si no tiene cuenta? o en realidad quieres que sean redireccionados aquellos que lleguen a una página o controlador específico? (por ejemplo, a la página de detalle de producto)

Link to comment
Share on other sites

Hola Luis C,

¿Quieres que CUALQUIER usuario que llegue a la web sea redireccionado al login si no tiene cuenta?

Actualmente ya tengo en la pagina que si entran en www.mitienda.com , no vean los productos sino que van directamente a la pagina de login, lo que me faltaría es que si alguien te manda a ti un articulo de la pagina ( la url me refiero) , que compruebe si está logueado y sino le mande a la pagina de login.

No se si me he explicado bien...

Gracias de nuevo,

Xavi

 

 

Link to comment
Share on other sites

hace 1 minuto, flash2022 dijo:

Hola Luis C,

¿Quieres que CUALQUIER usuario que llegue a la web sea redireccionado al login si no tiene cuenta?

Actualmente ya tengo en la pagina que si entran en www.mitienda.com , no vean los productos sino que van directamente a la pagina de login, lo que me faltaría es que si alguien te manda a ti un articulo de la pagina ( la url me refiero) , que compruebe si está logueado y sino le mande a la pagina de login.

No se si me he explicado bien...

Gracias de nuevo,

Xavi

 

 

Un ejemplo que he encontrado, si alguien te envia este link

https://www.xxxxxx.es/aceites-vegetales/2356-aceite-de-abisinia.html

lo mande sino está logueado a login

 

Link to comment
Share on other sites

hace 14 horas, luishuaymana dijo:

Cree una consulta en su frontcontroller.php. o edite un override.
classes/controllers/frontController.php

Gracias por tu respuesta, sería en la parte del init??

 

 public function init()
    {
        Hook::exec(
            'actionFrontControllerInitBefore',
            [
                'controller' => $this,
            ]
        );

        /*
         * Globals are DEPRECATED as of version 1.5.0.1
         * Use the Context object to access objects instead.
         * Example: $this->context->cart

 Aqui??

Saludos

Link to comment
Share on other sites

Hola de nuevo,

Buscando encontré esta solucion:

Buscar la function:

        public function init()

Agregar el siguiente código después de:

           parent::init(); 

           if (!$this->context->customer->isLogged() && $this->php_self != 'authentication' && $this->php_self != 'password')

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

 

Esto funciona perfecto, lo unico que al loguearse se queda en el menu del usuario y no vuelve al producto que el usuario buscaba, es decir si el usuario encontraba este link:

http://localhost/sercot/men/1-1-hummingbird-printed-t-shirt.html#/1-tamano-s/8-color-blanco

despues de loguearse lo envia al my-account y me gustaria saber si es posible que despues del login vuelva a ese producto.

Muchas gracias,

Xavi

Link to comment
Share on other sites

Hola Flash.  el enlace de autenticación tiene una variable GET que se llama "back". Esa es la que redirige en este caso a my-account. En el controlador necesitas cambiar "my-account" por la URL actual, por ejemplo:

 

Tools::redirect('index.php?controller=authentication&back='.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]);

 

 

Link to comment
Share on other sites

  • flash2022 changed the title to [Solucionado] Utilizar archivo tpl para comprobar si el usuario esta logueado
  • 2 years later...

Al hilo de esto...

Si quiero mostrar contenido solo a un cliente concreto ¿Cómo seria la consulta?

Por ejemplo para todos los clientes es:

{if $customer.is_logged}
{else}
{/if}

Para un concreto ¿?

 


        

Link to comment
Share on other sites

14 minutes ago, acpkor said:

Al hilo de esto...

Si quiero mostrar contenido solo a un cliente concreto ¿Cómo seria la consulta?

Por ejemplo para todos los clientes es:

{if $customer.is_logged}
{else}
{/if}

Para un concreto ¿?

 


        

En la lista de variables globales tienes también la info de cliente accediendo a $customer. Si haces {$customer|var_dump} en un template (o dump si lo quieres con formato "molon") volcarás todo el contenido del objeto en la página y podrás ver la clave que necesitas usar para diferenciar al cliente, o bien por email, o por ID (es lo más común) En ese sentido, dentro del condicional if $customer.is_logged pondrías otro condicional del tipo "if $customer.id == XXX" o "if $customer.email == XXXXXXX@XXXXXX" y dentro el contenido que quieras ofrecer a ese cliente en particular.

 

EDIT:

Ahora que lo pienso, creo que al id no se puede acceder desde smarty en un template, así que lo suyo sería hacer {if $customer.email == 'XXXX@XXXX'} {/if}

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

muchas gracias por tu pronta respuesta Luis

pues no lo consigo...
me da todo el rato error con diferentes pruebas...

Esto poniendo esto que me funciona para todos:

{if $customer.is_logged}
        <label class="label"><span class="eanedi">EAN EDI:</span> </label>
        <span class="eanedinumero">{$product.ean13}</span>
{else}
{/if}

Pero si quiero para le cliente con id 4, pongo esto (pero casca) ¿?

{if $customer.id == 4 .is_logged}
        <label class="label"><span class="eanedi">EAN EDI:</span> </label>
        <span class="eanedinumero">{$product.ean13}</span>
{else}
{/if}

¿como deberia ser programación correcta?

Link to comment
Share on other sites

5 minutes ago, acpkor said:

muchas gracias por tu pronta respuesta Luis

pues no lo consigo...
me da todo el rato error con diferentes pruebas...

Esto poniendo esto que me funciona para todos:

{if $customer.is_logged}
        <label class="label"><span class="eanedi">EAN EDI:</span> </label>
        <span class="eanedinumero">{$product.ean13}</span>
{else}
{/if}

Pero si quiero para le cliente con id 4, pongo esto (pero casca) ¿?

{if $customer.id == 4 .is_logged}
        <label class="label"><span class="eanedi">EAN EDI:</span> </label>
        <span class="eanedinumero">{$product.ean13}</span>
{else}
{/if}

¿como deberia ser programación correcta?

Como te comentaba, creo que id no es un índice disponible en el objeto customer desde smarty, mea culpa, así que tendrás que usar email. De todos modos la sintaxis no es correcta:


{if $customer.is_logged && $customer.email == 'xxxx@xxxx'}

{/if}

o bien anidas las comprobaciones


{if $customer.is_logged}
	{if $customer.email == 'xxxx@xxxx'}
    Mi contenido
    {/if}
{/if}

(Si no tienes que mostrar nada al resto puedes obviar el else)

Link to comment
Share on other sites

Alternativamente, puedes crear un módulo que haga la comprobación por tí y lo enganchas a un hook disponible en el template de producto (o creas un hook nuevo) Bonus points si añades una interfaz de configuración que te deje añadir o retirar IDs de cliente para mostrar ese contenido ;)

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...