Prestashop

Crear un hook en Prestashop 1.5

Si has llegado hasta aquí, seguramente sabes de qué hablamos. Y si no, te explicamos brevemente qué es un hook en Prestashop y para qué sirve. Prestashop funciona con módulos que se van cargando en determinados lugares de la web, dependiendo de la posición que le demos en Módulos -> Posiciones. A todos los bloques que ves en Posiciones se les llama hooks. Estos hooks, luego son llamados desde los archivos con extensión .tpl para cargar todos los módulos que contenga el hook. Entre los hooks más conocidos se encuentran: header, leftColumn, rightColumn, home y footer.

Y ahora, vamos al tutorial:

Paso 1: Lo primero que debes hacer es acceder a la base de datos de Prestashop. Para ello, accede a tu panel Plesk (si eres cliente de Aquí hay dominios) y haz clic en la pestaña Sitios web y dominios. A continuación, haz clic en Bases de datos:

Bases de datos

Paso 2: Haz clic en el nombre de la base de datos.

Nombre de la base de datos

Paso 3: Asegúrate de estar en la base de datos que has pulsado y haz clic en Webadmin.WebAdmin

Paso 4: En el buscador, empieza a escribir hook y verás las tablas ps_hook y ps_hook_alias (en nuestro caso: ahd_hook y ahd_hook_alias porque en la instalación de Prestashop cambiamos el prefijo de las tablas).

Tablas de Prestashop

Paso 5: Haz clic en ps_hook_alias y luego en Insertar.

Insertar registro

Paso 6: Escribe NuevoHook en alias y displayNuevoHook en name. Estos nombres puedes cambiarlos a tu gusto, pero intenta seguir la misma estructura que usa Prestashop. Luego lo agradecerás. Pulsa en Continuar.

Nuevo registro

Paso 7: Si lo has hecho correctamente verás un mensaje similar a este:

Fila insertada

Paso 8: Haz clic ahora en la tabla de la izquierda ps_hook y de nuevo Insertar como en el Paso 5. En este caso escribe:

  • name: displayNuevoHook (importante que sea igual al name de la tabla ps_hook_alias)
  • title: Nuevo Hook (puedes ponerle el que quieras)
  • description: Descripción de la función del hook (puedes ponerle la que quieras, pero cuanta más información, mejor)
  • Lo demás, puedes dejarlo en blanco.

    Insertar registro

    Por último, haz clic en Continuar.

    Paso 9: Ve ahora a tu panel de gestión de Prestashop y haz clic en Módulos -> Posiciones, vamos a ver si nuestro hook aparece (tendrás que bajar para encontrarlo o usar Ctrl+F o Cmd+F para buscarlo). Si te aparece… ¡todo va bien!

    Posiciones

    Paso 10: Ve al FTP y abre el archivo:
    /override/classes/controller/FrontController.php
    y sustituye lo que hay por:


    <?php
    class FrontController extends FrontControllerCore
    {
    public function initContent()
    {
    $this->process();
    if (!isset($this->context->cart))
    $this->context->cart = new Cart();
    if ($this->context->getMobileDevice() == false) {
    // These hooks aren't used for the mobile theme.
    // Needed hooks are called in the tpl files.
    if (!isset($this->context->cart))
    $this->context->cart = new Cart();
    $this->context->smarty->assign(array(
    /* === START: DO NOT TOUCH IT */
    'HOOK_HEADER' => Hook::exec('displayHeader'),
    'HOOK_TOP' => Hook::exec('displayTop'),

    'HOOK_NUEVOHOOK' => Hook::exec('displayNuevoHook'),
    'HOOK_LEFT_COLUMN' => ($this->display_column_left ? Hook::exec('displayLeftColumn') : ''),
    'HOOK_RIGHT_COLUMN' => ($this->display_column_right ? Hook::exec('displayRightColumn', array('cart' => $this->context->cart)) : ''),
    /* === END: DO NOT TOUCH IT */

    /* === START: ADD HOOK | EXAMPLE */
    'HOOK_MY_USER' => Module::hookExec('myUser'),
    'HOOK_MY_CATEGORIES' => Module::hookExec('myCategories'),
    'HOOK_SEARCH' => Module::hookExec('mySearch')
    /* === END: ADD HOOK | EXAMPLE */
    ));
    } else {
    $this->context->smarty->assign(array(
    'HOOK_MOBILE_HEADER' => Hook::exec('displayMobileHeader'),
    ));
    }
    }
    }

    En la línea 19 es donde hemos añadido nuestro hook. El nombre {$HOOK_NUEVOHOOK} será el que usaremos en los .tpl para llamar a este hook. Por ejemplo, imagina que quieres colocar este hook en la página de contacto. Abre contact-form.tpl y escribe {$HOOK_NUEVOHOOK} donde quieras que aparezcan los módulos que vamos a insertar en el hook.

    Paso 11: Aún nos falta enganchar los módulos, es decir, no podemos meter un módulo en cualquier hook, los hooks a los que pueden engancharse los módulos tienen que venir especificados en el código php del módulo. Para ello, abre el php del módulo, por ejemplo /modules/blockadvertising/blockadvertising.php y busca una función de hook: public function hookTop, verás algo así:


    public function hookLeftColumn($params)
    {
    return $this->hookRightColumn($params);
    }

    Duplícala y cambia el nombre de la función, debe quedarte algo así:

    public function hookNuevoHook($params)
    {
    return $this->hookRightColumn($params);
    }

    Paso 12: Si vas a Módulos -> Posiciones, verás que el hook que has creado está vacío. Para meter ahí los módulos que quieras debes hacer clic en Trasladar un módulo o reiniciar cada módulo (cuidado si haces esto porque perderás la configuración).

    Trasladar un módulo

    ¡Listo! Si has llamado a tu hook desde la página de contacto, ahora, si entras, deberías ver el Bloque de publicidad justo donde hayas puesto {$HOOK_NUEVOHOOK}. Puedes meter tantos módulos como quieras, pero recuerda, que para cada módulo, debes crear la función del hook en el php correspondiente.

Cambiar el orden de las páginas en el módulo Bloque CMS (blockcms) de Prestashop

Cambiar el orden de las páginas CMS es muy sencillo, pero si no lo has hecho nunca, puedes llegar a perder mucho tiempo buscando la forma, incluso tocar código cuando no es necesario…

Para ponernos en situación, estamos hablando del módulo Bloque CMS (blockcms), el cual te permite mostrar tus páginas CMS en la columna de la derecha, la izquierda o en el pie de página (footer).

Módulo Bloque CMS

Lo normal, sería ir a la configuración del módulo y buscar ahí la forma, pero no… Es tan sencillo como ir a Preferencias -> CMS e ir organizando arrastrando a través de las flechas de posición de cada página:

Flechas posición CMS

Haciendo esto, podrás tener rápidamente tus páginas de Prestashop ordenadas a tu gusto. ¿Fácil no?

Modificar htaccess en PrestaShop 1.5

Para los que empezáis a usar PrestaShop 1.5 y ya habíais usado PrestaShop 1.4, os habréis dado cuenta, que ya no está la opción de añadir cambios propios al .htaccess.

En PrestaShop 1.4, en Back Office > Herramientas > Generadores, veíamos lo siguiente:

generar htaccess prestashop 1.4

En Configuración específica, añadíamos las sentencias que necesitábamos, pulsábamos Generar el archivo .htaccess, y automáticamente se generaba el htaccess con la configuración de PrestaShop, más las sentencias que nosotros hayamos añadido en la configuración específica.

En PrestaShop 1.5 y versiones superiores ha cambiado un poco. Ya no tenemos una sección en el Back Office para este fin, pero sigue siendo muy fácil. Ahora tan solo es necesario editar el fichero .htaccess directamente desde el FTP, y añadir lo que necesitamos en dicho fichero. Pero ojo, es muy importante hacerlo después de la siguiente línea:

# ~~end~~ Do not remove this comment, Prestashop will keep automatically the code outside this comment when .htaccess will be generated again

Si tenéis algo que añadir al .htaccess. debéis añadirlo después de esta linea, sin borrar esta línea. De esta forma cuando PrestaShop genere cambios en el .htaccess, conservará todo lo que se haya añadido después de dicha línea, y sus cambios, solo los hará, desde el principio del fichero, hasta llegar a esta línea.

Si quieres aprender aún más sobre este tema, puedes leer otros artículos sobre htaccess.

Cómo cambiar textos o traducciones en PrestaShop

Suele ser muy normal, una vez instalado PrestaShop, que tengas que traducir o sustituir algún texto, ya sea porque está sin traducir o simplemente porque te gusta más expresarlo de otra forma. A continuación, te explicamos cómo hacerlo:

Paso 1: Una vez que hayas abierto tu panel de gestión de PrestaShop, dirígete a Localización > Traducciones

localizacion

Paso 2: A continuación, verás un primer desplegable con varias opciones:

  1. Traducciones del Front-office: En esta sección encontrarás todas las traducciones de la tienda (parte visible) que no pertenezca a los módulos. A veces es complicado detectar si una traducción pertenece a esta sección o a los módulos.
  2. Traducciones del Back-office: Como su propio nombre indica, encontrarás las traducciones de la parte de gestión de tu tienda (administración), es decir, la parte que no ven tus clientes.
  3. Traducciones de mensajes de error: Está opción te permite traducir, los mensajes de error, como por ejemplo cuando a la hora de registrarse un usuario no rellena bien los datos requeridos y le aparece algún error.
  4. Traducciones de los nombres de los campos: Esta opción puede ser la menos usada, ya que sirve para cambiar el nombre de los campos (inputs, selects…).
  5. Instaladas las traducciones de módulos: En este apartado podrás ver las traducciones pertenecientes a los módulos, la mayoría de las que ves en la tienda. Te aconsejamos que si no sabes detectar si es un módulo o no, busques en las traducciones del Front-office y si no las ves, pases a esta opción.
  6. Traducciones de los PDF: Está opción te permite traducir los textos que aparecen en las facturas, albaranes o cualquier PDF generado por PrestaShop.
  7. E-mail de plantillas de correos electrónicos: Desde aquí podrás traducir los textos de los correos que se envían, como por ejemplo, cuando un pedido es confirmado, cancelado…

opciones de tradución

Lo más normal es que las traducciones que buscas estén en el Front-office o en las Instaladas en las traducciones de módulos. Como decíamos, quizás está sea la parte más difícil: Identificar dónde se encuentra la traducción que buscas.

traducciones

Paso 3: Una vez que has seleccionado una opción en el primer desplegable, debes seleccionar el tema (theme) al cual quieres hacerle la traducción, que estés usando un tema diferente al Default no significa que tengas que marcarlo. Si seleccionas el tema que estás usando, para traducir algo de un módulo, encontrarás los módulos que estén dentro de la capeta /modules de tu tema (y no tienen porqué ser todos los módulos en uso).

Paso 4: Una vez seleccionados los dos desplegables, haz clic en la bandera del idioma correspondiente.

Paso 5: En la nueva pantalla que aparece, verás un botón para Ocultar todos los campos,  si haces clic en él, dicho botón cambiará a Ampliar todos los campos. Haz clic de nuevo para abrir todos los campos y que la búsqueda sea más fácil.

Botón ocultar

Paso 6: A continuación, ya puedes buscar la palabra o frase que quieres cambiar. Al haber tantas traducciones, puede ser una tarea difícil, así que te aconsejamos usar el propio buscador del navegador pulsando Ctrl + F (en Windows) o Cmd + F (en Mac).

Paso 7: No olvides pulsar Actualizar traducciones cuando hayas hecho las modificaciones.

Actualizar traducciones

Cómo configurar en Prestashop precios reducidos, descuentos, cupones y regalos para nuestros clientes

Una gran mayoría de las compras en Internet están determinadas por el precio del producto, los consumidores online buscan ofertas o cupones de descuento que les permitan comprar a un mejor precio.

Prestashop en su nueva versión 1.5 ha incorporado y mejorado las opciones disponibles para tales acciones, creando así una gran cantidad de posibilidades que nos permiten ofrecer a nuestros clientes ofertas y regalos atractivos que capten su atención.

Precios Específicos

En la ficha de cada producto tenemos un apartado de “precios específicos” en donde podemos establecer un descuento en el precio bajo los siguientes criterios:

  • Por divisa, países y grupos de clientes, podremos elegir todos los valores o para uno concreto.
  • Para un cliente especificado, únicamente se beneficiara de ese precio el cliente indicado.
  • Podemos asignarlo a todas las combinaciones de ese producto o solo a una de ellas.
  • Con vigencia delimitada por fechas, llegado a la fecha tope dejará de mostrarse.
  • Aplicable a partir de una cantidad comprada del producto.
  • La reducción del precio puede ser en una cantidad fija o un porcentaje, aplicándolo al precio base  o a un precio nuevo establecido.

 precios-especificos

 

Para evitar meter estas condiciones de precio específico producto a producto, Prestashop nos ofrece una opción llamada “Reglas de precios del catálogo”, en donde tenemos las opciones anteriores pero además podemos condicionarlas por categoría, fabricante, proveedor, atributos y características. Para el ejemplo de la imagen de abajo, el precio específico establecido lo asignará de forma automática a todos los productos de la categoría Portátiles cuyo fabricante sea Apple.

 precios-especificos2  

Reglas de la Cesta

Esta opción nos permite crear cupones o vales de descuento que podrán ser canjeados en el carrito o cesta a la hora de realizar una compra. La información necesaria para crearla se divide en tres apartados:

Información

  • Nombre del cupón.
  • Descripción del ahorro o regalo que te aporta el cupón.
  • Código del cupón el cual lo podemos introducir o generar aleatoriamente.
  • Si queremos mostrar el descuento en el carrito.
  • Uso parcial, elegimos si en el caso que el descuento del cupón sea superior al importe de la compra, podremos dejar la parte restante para otra compra posterior.
  • Prioridad, si tenemos varios cupones se canjea el de mayor prioridad.

 Reglas de cesta-1  

Condiciones

  • El cupón puede ser para un cliente concreto o para todos.
  • Fechas entre las que podré canjear el cupón.
  • Se puede limitar para compras a partir de un determinado importe, por lo que solo podré canjear el cupón si hago una compra superior al importe indicado
  • Total de cupones ofrecidos, si pongo por ejemplo 10 una vez que se hayan canjeado 10 cupones ya no se admitirán más aunque la fecha de vigencia no haya caducado.
  • Cupones por usuario, cuantas veces podrá canjear el mismo usuario este cupón.
  • Condicionar el cupón al transporte, grupo de clientes y grupo de productos:
    • Transporte, obligamos a elegir determinadas agencias de transporte.
    • Grupos de clientes, solo podrá canjearlo aquellos usuarios que pertenezcan a los grupos de clientes especificados.
    • La cesta debe contener al menos productos que pertenezca a la categorías, marca o proveedor establecido.

Reglas de cesta-2

Acciones

Aquí establecemos el beneficio que adquiere el usuario al canjear el cupón que puede ser transporte gratuito, un descuento en la compra realizada o un regalo de alguno de los productos de nuestro catálogo, en el caso del ejemplo de la imagen de abajo regalamos unos auriculares.

Reglas de cesta-3

Podéis consultar información complementaria en el blog del Profesor Yale

Error en Prestashop en el select de provincias en Internet Explorer

No hace mucho detectamos que cuando un usuario se iba a registrar en una tienda Prestashop con Internet Explorer 8 ó 9, al seleccionar o tener seleccionado por defecto España, no se mostraba el select de las provincias. El usuario no podía indicar la provincia que es un campo obligatorio por lo que no podía continuar con el registro.

Todo esto se debe a un error javascript por tener una variable indefinida. El error concretamente es:

countriesNeedIDNumber no está definido

En la línea 47 de /themes/tutema/js/tools/statesManagement.js

error prestashop ie select provincias

Aunque realmente dicha variable está definida, es más, muchos otros navegadores así lo detectan y funciona correctamente, pero Internet Explorer «obliga» a que se defina con var delante. Al no hacerlo dicha variable no era visible en otro fragmento de código, daba error de variable indefinida, y finalmente no llegaba a mostrar las provincias.

Para solucionarlo no hay que modificar nada en statesManagement.js. En este caso hay que modificar el fichero authentication.tpl que se encuentra dentro del tema.

Ten en cuenta que al modificar un .tpl tendrás que activar la compilación de tu tienda para que detecte el cambio. Aunque las nuevas versiones de Prestashop, de la 1.5 en adelante, traen una opción para que se autocompile si detecta cambios. Pero en las antiguas, tendrás que activar la compilación tú, y después desactivarlo. Esta opción se encuentra en Preferencias > Rendimiento.

El cambio hay que realizarlo en las líneas 32, 33, 34 y 35 que originalmente son estas:

idSelectedCountry = { if isset($smarty.post.id_state) }{ $smarty.post.id_state|intval }{else}false{/if};
countries = new Array();
countriesNeedIDNumber = new Array();
countriesNeedZipCode = new Array();

y sustituirlas por estas:

var idSelectedCountry = { if isset($smarty.post.id_state) }{ $smarty.post.id_state|intval }{else}false{/if};
var countries = new Array();
var countriesNeedIDNumber = new Array();
var countriesNeedZipCode = new Array();

Te debe quedar algo así:

prestashop authentication.tpl

Si tienes alguna consulta, ya sabes, puedes usar la zona de comentarios. Esperamos que te haya sido de ayuda, si ha sido así, no olvides compartirlo en tus redes sociales. ¡Gracias!

Borrar pedidos en Prestashop 1.5 o superior

Para borrar o eliminar pedidos en Prestashop 1.4, estábamos acostumbrados a añadir una simple línea en el fichero AdminOrders.php, del directorio de \admin\tabs:

$this->delete=true;

Con esto teníamos la posibilidad de borrar los pedidos desde la pestaña Pedidos, bien uno a uno o marcando todos y pulsando un botón para eliminar todos. Esto era muy útil para borrar pedidos de prueba por ejemplo.

En Prestashop 1.5.2 esto ha cambiado un poco. Tanto es así, que salieron módulos que nos permitían borrar los pedidos uno a uno introduciendo el id del pedido, sin darnos la posibilidad de borrar todos, lo cual era muy lento. Pero hay una solución similar a la que teníamos en versiones anteriores.

Para ello modificaremos el fichero AdminOrdersController.php que encontraremos en el directorio /controllers/admin

Tan sólo tenemos que añadir las 2 líneas siguientes:


/* Eliminar pedidos en Prestashop 1.5 o superior */
$this->addRowAction('delete');
$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
/* FIN: Eliminar pedidos en Prestashop 1.5 o superior */

Puede quedar algo similar a esto:

Borrar Pedidos Prestashop AdminOrdersController

Cómo podéis ver, hemos añadido el código (1) y (2), y el (3) lo selañamos en la captura, porque es lo que en versiones anteriores de Prestashop se ponía a true, pero en este caso, debe permanecer como false.

Si te ha sido de ayuda o crees que le puede ser de ayuda a alguien, no te olvides de compartirlo en tus redes sociales. ¡Gracias!

Cómo configurar Ajax File Manager de Prestashop en español

Si usas la utilidad Ajax File Manager para subir imágenes en el CMS o productos de Prestashop, seguro que te gustaría tenerlo en español. A continuación te indicamos una sencilla modificación para poder tenerlo traducido al español:

Paso 1: Abre el archivo config.base.php que se encuentra en la ruta:

\prestashop\nombredetuadmin\ajaxfilemanager\inc\config.base.php

Paso 2: Sustituye el siguiente código:

define('CONFIG_LANG_DEFAULT', (CONFIG_QUERY_STRING_ENABLE && !empty($_GET['language']) && file_exists(DIR_LANG . secureFileName($_GET['language']) . '.php')?secureFileName($_GET['language']):'en'));

Por este otro:

define('CONFIG_LANG_DEFAULT', (CONFIG_QUERY_STRING_ENABLE && !empty($_GET['language']) && file_exists(DIR_LANG . secureFileName($_GET['language']) . '.php')?secureFileName($_GET['language']):'es'));

Paso 3: Descarga el siguiente archivo, descomprímelo y colócalo en la carpeta \prestashop\nombredetuadmin\ajaxfilemanager\langs\, si aún no existe (si ves que ya existe un es.php, deberías verlo en español).

Descargar archivo de traducción comprimido

¡Listo! Abre tu panel de gestión de Prestashop y comprueba que ahora lo ves en español.

No aparece forma de pago instalada en Prestashop

A veces ocurre que instalas un módulo de alguna forma de pago pero no te aparece entre las formas de pago disponibles para pagar. Puede tratarse por muchas razones, pero os vamos a presentar una de las más comunes con la que nos hemos encontrado.

Vamos a mostrar el caso concreto del módulo de paypal. Si por ejemplo tienes instalado este módulo y al hacer un pedido no te aparece esta forma de pago para pagar… primero vamos a Módulos > Pago
prestashop módulo pago

En las Restricciones del módulo de pagos, te deben aparecer todas las formas de pago que tengas instalada, pero puede que no te aparezca esta en concreto, la que no aparece a la hora de hacer un pedido. Por ejemplo tenemos instalado paypal pero sólo nos aparece transferencia bancaria y cheques:

prestashop transferencia cheque

En este caso, nos vamos por FTP a los ficheros del módulo. Si tienes el alojamiento web con nosotros vamos a /httpdocs/modules/paypal y editamos el fichero paypal.php. Veremos algo como esto:

prestashop paypal tab payments

Revisaremos la variable $this->tab, en este caso vemos que tiene el valor: payments. Si es así, debemos asignarle el valor payments_gateways. Debe quedar así:

prestashop paypal tab payments_gateways

Ahora tan sólo debemos guardar los cambios y volver a prestashop a Modulos > Pagos. Debes verlo como en la siguiente captura:

prestashop resctricciones módulos pago

Como verás, ahora sí aparece la forma de pago paypal y podrás indicar la moneda correspondiente. Una vez hecho esto ya deberás ver la forma de pago a la hora de hacer un pedido.

Logo PNG transparente en Prestashop 1.5

Si has intentado subir un logo con fondo transparente en PNG a tu tienda de Prestashop ya te habrás dado cuenta que cuando guardas aparece con un fondo blanco, ¿verdad? Esto ocurre porque Prestashop ha convertido tu imagen a JPG, y como ya sabrás, este formato no permite transparencias.

Esto tiene fácil solución! Haz clic en Preferencias -> Imágenes:

Preferencias-Imágenes

Selecciona la opción Usar PNG si la imagen base está en formato PNG:

Usar PNG si la imagen base está en formato PNG

A continuación vuelve a subir tu logo en PNG, verás que ahora ya te aparecerá con transparencia:

Logo PNG transparente en Prestashop 1.5