Contenidos ordenados en el blog y fin de las entradas de Prestashop

Se me olvido comentaros, que tenemos índices desde hace años de algunos contenidos del blog, a excepción de las mini review de las plantillas gratuitas de Prestashop, que sinceramente nunca he sido mucho de reseñar plantillas y tampoco he hablado de muchas en su momento…

Los índices son de distintas versiones de Prestashop, sobre todo donde más contenido tiene es de versiones anteriores de Prestashop, que es donde le estuve metiendo contenido al blog hace siglos, aunque como ya sabéis realmente donde estuve participando es en los foros de Prestashop, donde puedo decir con orgullo que he escrito alrededor de 40 mil mensajes de soporte cuando no teníamos una guía de usuario sería traducida al español y teníamos que andar investigando de un sitio a otro, y ya no te digo de desarrollo, cada vez que recuerdo lo que teníamos que hacer en el 2010, para investigar y en muchos casos ir a palo ciego, por suerte en la actualidad, es más sencillo encontrar documentación por la red de todo, y todo ha cambiado mucho 🙂

También, por suerte, Jesús,  en su momento se puso a traducir la guía de usuario oficial, además de otras guías oficiales.

Recordar que también disponemos en el blog, desde hace bastantes años, de reseñas de módulos gratuitos de Prestashop que hemos escrito en este blog 🙂

Dicho esto, ha sido un orgullo pertenecer a la Comunidad de Prestashop, y aunque mi vuelta ha sido temporal algunos meses de este año, me lo he pasado muy bien y todo llega a su final.

Por otro lado, aunque no creo que pueda escribir, si escribo alguna vez no serán entradas, por lo tanto si queréis, tenéis el bloque de suscribirse por email (para aquellos que no estén suscritos por email) en el lateral del blog, por si alguna vez antes del 2020, os puedo enviar algún boletín con algunas “páginas” publicadas en el blog (pero esta complicado el asunto).

Fin Prestashop

Cambiar ubicación de las pestañas del producto en Prestashop 1.7

En este manual de Prestashop, vamos a comentar cambiar de ubicación el bloque donde se muestran las pestañas de la descripción del producto, detalles del producto, etc…. de la ficha del producto en Prestashop 1.7

Por defecto, estas pestañas se ven de la siguiente forma:

Pestañas del producto en Prestashop 1.7

La idea final es que se muestren de la siguiente forma:

Cambiando de ubicación el bloque de las pestañas en Prestashop 1.7

Una de las posibles soluciones, es acceder al fichero:

/themes/classic/templates/catalog/product.tpl

Fichero product.tpl

Buscamos este bloque:

{block name='product_tabs'}
<div class="tabs">
<ul class="nav nav-tabs">
{if $product.description}
<li class="nav-item">
<a class="nav-link{if $product.description} active{/if}" data-toggle="tab" href="#description">
{l s='Description' d='Shop.Theme.Catalog'}
</a>
</li>
{/if}
<li class="nav-item">
<a class="nav-link{if !$product.description} active{/if}" data-toggle="tab" href="#product-details">
{l s='Product Details' d='Shop.Theme.Catalog'}
</a>
</li>
{if $product.attachments}
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#attachments">
{l s='Attachments' d='Shop.Theme.Catalog'}
</a>
</li>
{/if}
{foreach from=$product.extraContent item=extra key=extraKey}
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#extra-{$extraKey}">{$extra.title}</a>
</li>
{/foreach}
</ul>
<div class="tab-content" id="tab-content">
<div class="tab-pane fade in{if $product.description} active{/if}" id="description">
{block name='product_description'}
<div class="product-description">{$product.description nofilter}</div>
{/block}
</div>
{block name='product_details'}
{include file='catalog/_partials/product-details.tpl'}
{/block}
{block name='product_attachments'}
{if $product.attachments}
<div class="tab-pane fade in" id="attachments">
<section class="product-attachments">
<h3 class="h5 text-uppercase">{l s='Download' d='Shop.Theme.Actions'}</h3>
{foreach from=$product.attachments item=attachment}
<div class="attachment">
<h4><a href="{url entity='attachment' params=['id_attachment' => $attachment.id_attachment]}">{$attachment.name}</a></h4>
<p>{$attachment.description}</p
<a href="{url entity='attachment' params=['id_attachment' => $attachment.id_attachment]}">
{l s='Download' d='Shop.Theme.Actions'} ({$attachment.file_size_formatted})
</a>
</div>
{/foreach}
</section>
</div>
{/if}
{/block}
{foreach from=$product.extraContent item=extra key=extraKey}
<div class="tab-pane fade in {$extra.attr.class}" id="extra-{$extraKey}" {foreach $extra.attr as $key => $val} {$key}="{$val}"{/foreach}>
{$extra.content nofilter}
</div>
{/foreach}
</div>
{/block}
</div>

Y lo vamos a dejar encima del bloque (lo buscamos lógicamente):

{block name='page_footer_container'}
<footer class="page-footer">{block name='page_footer'}
<!-- Footer content -->
{/block}</footer>{/block}

Es decir:

{block name='product_tabs'}
<div class="tabs">
<ul class="nav nav-tabs">
{if $product.description}
<li class="nav-item">
<a class="nav-link{if $product.description} active{/if}" data-toggle="tab" href="#description">
{l s='Description' d='Shop.Theme.Catalog'}
</a>
</li>
{/if}
<li class="nav-item">
<a class="nav-link{if !$product.description} active{/if}" data-toggle="tab" href="#product-details">
{l s='Product Details' d='Shop.Theme.Catalog'}
</a>
</li>
{if $product.attachments}
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#attachments">
{l s='Attachments' d='Shop.Theme.Catalog'}
</a>
</li>
{/if}
{foreach from=$product.extraContent item=extra key=extraKey}
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#extra-{$extraKey}">{$extra.title}</a>
</li>
{/foreach}
</ul>
<div class="tab-content" id="tab-content">
<div class="tab-pane fade in{if $product.description} active{/if}" id="description">
{block name='product_description'}
<div class="product-description">{$product.description nofilter}</div>
{/block}
</div>
{block name='product_details'}
{include file='catalog/_partials/product-details.tpl'}
{/block}
{block name='product_attachments'}
{if $product.attachments}
<div class="tab-pane fade in" id="attachments">
<section class="product-attachments">
<h3 class="h5 text-uppercase">{l s='Download' d='Shop.Theme.Actions'}</h3>
{foreach from=$product.attachments item=attachment}
<div class="attachment">
<h4><a href="{url entity='attachment' params=['id_attachment' => $attachment.id_attachment]}">{$attachment.name}</a></h4>
<p>{$attachment.description}</p
<a href="{url entity='attachment' params=['id_attachment' => $attachment.id_attachment]}">
{l s='Download' d='Shop.Theme.Actions'} ({$attachment.file_size_formatted})
</a>
</div>
{/foreach}
</section>
</div>
{/if}
{/block}
{foreach from=$product.extraContent item=extra key=extraKey}
<div class="tab-pane fade in {$extra.attr.class}" id="extra-{$extraKey}" {foreach $extra.attr as $key => $val} {$key}="{$val}"{/foreach}>
{$extra.content nofilter}
</div>
{/foreach}
</div>
{/block}
</div>
{block name='page_footer_container'}
<footer class="page-footer">
{block name='page_footer'}
<!-- Footer content -->
{/block}
</footer>
{/block}

 

Cambia de ubicación de las pestañas en Prestashop 1.7

Recordar, limpiar la cache en la pestaña Parámetros Avanzados -> Rendimiento

Borrar cache Prestashop 1.7

Documento realizado bajo Prestashop 1.7.1.2

Por otro lado, recordar que en Prestashop 1.7, podemos editar los ficheros de la plantilla, sin necesidad de editar los ficheros originales.

Creación y borrado de tablas en un módulo de Prestashop 1.7

En esta ocasión, vamos hablar del menú horizontal de Prestashop 1.7, pero no vamos hablar de su configuración.

Cuando añadimos los enlaces manuales dentro de la configuración del menú horizontal dentro del bloque: “Añadir un nuevo enlace

Enlaces manuales del menú horizontal en Prestashop 1.7
Enlaces manuales del menú horizontal en Prestashop 1.7

Se guardan en la tablas: “ps_linksmenutop y ps_linksmenutop_lang

Tabla ps_linksmenutop

En esta tabla se guarda el valor de los siguientes campos:

  • ID del enlace (id_linksmenutop)
  • ID de la tienda que tiene asociado ese enlace (id_shop)
  • (new_window)-> 0 El enlace no se abre en una nueva ventana / 1 El enlace se abre en una nueva ventana
Tabla ps_linksmenutop_lang
  • id_linksmenutop -> Este ID tiene vinculación, con el que esta definido en la tabla ps_linksmenutop)
  • id_lang -> ID del idioma  (Tener en cuanta que cuando añadimos enlaces en el menu horizontal, podemos hacerlo por idiomas, por eso esta disponible este campo para distinguir los datos del enlace entre un idioma y otro)
  • id_shop -> ID de la tienda
  • label -> Etiqueta de lenlace
  • link -> Url del enlace

Estas tablas, las crea el módulo del menú horizontal al instalarse.

Si entramos en el fichero:

“modules/ps_mainmenu/ps_mainmenu.php”

Vemos que dentro de la función “install” (public function install) tenemos una llamada a la función “installDb()

Y si vemos el contenido de la función “installDb()“, vemos el siguiente código:

 public function installDb()
    {
        return (Db::getInstance()->execute('
		CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop` (
			`id_linksmenutop` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
			`id_shop` INT(11) UNSIGNED NOT NULL,
			`new_window` TINYINT( 1 ) NOT NULL,
			INDEX (`id_shop`)
		) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;') &&
            Db::getInstance()->execute('
			 CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop_lang` (
			`id_linksmenutop` INT(11) UNSIGNED NOT NULL,
			`id_lang` INT(11) UNSIGNED NOT NULL,
			`id_shop` INT(11) UNSIGNED NOT NULL,
			`label` VARCHAR( 128 ) NOT NULL ,
			`link` VARCHAR( 128 ) NOT NULL ,
			INDEX ( `id_linksmenutop` , `id_lang`, `id_shop`)
		) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;'));
    }

Vemos que la función esta retornando la ejecución de la creación de dos tablas.

Dentro de return tenemos:

Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop` (
`id_linksmenutop` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`id_shop` INT(11) UNSIGNED NOT NULL,
`new_window` TINYINT( 1 ) NOT NULL,
INDEX (`id_shop`)
) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;')

Para crear la tabla “xx_linksmenutop

Y

Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop_lang` (
`id_linksmenutop` INT(11) UNSIGNED NOT NULL,
`id_lang` INT(11) UNSIGNED NOT NULL,
`id_shop` INT(11) UNSIGNED NOT NULL,
`label` VARCHAR( 128 ) NOT NULL ,
`link` VARCHAR( 128 ) NOT NULL ,
INDEX ( `id_linksmenutop` , `id_lang`, `id_shop`)
) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;')

Para crear la tabla: xx_linksmenutop_lang

Estamos usando “Db::getInstance()->execute” (evidentemente acompañado del CREATE TABLE) para crear las tablas.

Por otro lado, estas tablas son eliminadas al desinstalar el módulo, si nos fijamos en la función “uninstall” del módulo ( public function uninstall)

Vemos que entre otras instrucciones, tiene una llamada a la función uninstallDB()

Al entrar en el contenido de dicha función, nos encontramos con:

protected function uninstallDb()
{
Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'linksmenutop`');
Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'linksmenutop_lang`');
return true;
}

Donde vemos que usamos: “Db::getInstance()->execute” (evidentemente acompañado de DROP TABLE) para borrar las tablas: “xx_linksmenutop” y “xx_linksmenutop_lang“.

Recordar que “_DB_PREFIX_” es el prefijo de la base de datos, para indicar que sera añadido automáticamente al crear las tablas.

Es decir si el prefijo de la base de datos es ps_, cuando vaya a crear o a borrar por ejemplo la tabla  “linksmenutop“, la creara con el nombre ps_linksmenutop

Documento construido bajo la versión 1.7.1.2 de Prestashop y la versión “2.0.2” del módulo del menú horizontal.

Ocultar método de pago a un producto en Prestashop

En esta guía, vamos a ocultar el método de pago de transferencia bancaria en Prestashop a un producto que se llama “Chorizos de Alcantarilla”.

En este ejemplo, vamos a editar a manorra (pero recordar que lo ideal es hacer un override de la clase del módulo):

Dentro del fichero: modules/bankwire/bankwire.php y dentro de la función del hook -> hookPayment

Recogemos los productos del carrito, comprobamos el ID de un producto en concreto coincide con el que queremos ocultar ese método de pago para ese producto  y dejamos de mostrar el método de pago en Prestashop para el producto “Chorizos de Alcantarilla”:

La función del hookPayment por defecto esta así en el módulo de transferencia bancaria.

public function hookPayment($params)
{
if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;
$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_bw' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
}

Dentro vamos añadir, la siguiente línea:

$products = $this->context->cart->getProducts();

Para obtener los productos del carrito.

Y para recorrer los productos del carrito, usaremos (un foreach), si alguno de los productos del carrito coincide con el ID del producto que hemos puesto en la comparación, no retornamos nada, y por tanto no se muestra el método de pago del módulo de transferencia bancaria.

if($products)
{
foreach ($products as $productos) {
if ($productos['id_product'] == 'X')
{
return;
}
}
}

Recordar que donde he puesto ‘X’, vosotros tenéis que colocar el ID del producto a ocultar

La función quedaría así:

public function hookPayment($params)
{
$products = $this->context->cart->getProducts();
if($products)
{
foreach ($products as $productos) {
if ($productos['id_product'] == 2)
{
return;
}
}
}
if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;
$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_bw' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
}
Código para ocultar método de pago por producto en Prestashop

Recordar que lo ideal es hacer un override de la clase del módulo. ¿Cómo se hace un override de la clase de un módulo?

Documento testeado en PrestaShop 1.6.1.14

Formulario de contacto en los contenidos en Prestashop 1.7

Gracias al nuevo sistema de widget que nos ofrece Prestashop 1.7, podemos mostrar el formulario de contacto que trae por defecto Prestashop 1.7 en las páginas de contenidos que tengamos en la pestaña Diseño -> Páginas 

La instrucción clave es la siguiente:

{widget name="contactform"}

Si queremos mostrar el formulario de contacto en las páginas de contenidos, editamos el fichero:

/themes/classic/templates/cms/page.tpl

Y añadimos la instrucción del widget, por ejemplo debajo de:

{$cms.content nofilter}

De esta manera se mostrara debajo de los contenidos.  ($cms.content imprime el contenido (campo contenido/descripción) de las páginas que hemos metido en la pestaña Diseño -> Páginas en los CMS)

En definitiva, lo dejaríamos así:

{$cms.content nofilter}
{widget name="contactform"}

¿Cómo podemos limitarlo para que solo se muestre en una de las páginas de contenidos y no en todas?

Tenemos varias opciones, una de ellas es hacer una comparación el ID del CMS donde estamos situados.

Dejándolo el código del widget así:

{if $cms.id == "X" }
{widget name="contactform"}
{/if}

En X, colocamos el ID del CMS (Contenido) que hemos creado en la pestaña Diseño -> Páginas.

ID CMS

En nuestro ejemplo, vamos a colocar el ID 3, dejándolo así:

{if $cms.id == "3" }
{widget name="contactform"}
{/if}
Widget formulario de contacto en Prestashop 1.7

Documento construido bajo Prestashop 1.7.1.2

Por último y no menos importante, recordar limpiar la cache en la pestaña Parámetros Avanzados -> Rendimiento

Borrar cache Prestashop 1.7

Y ahora dejo una pregunta abierta, ¿Podremos hacer esto en futuras variantes de PrestaShop 1.7, sin necesidad de tocar código?

Añadir aviso en el pie de página de Prestashop

Este módulo, me lo encontré hace bastantes años por la Comunidad, creo que por el 2013, pero se ha terminado actualizando con el tiempo. (No confundir con el módulo de las Cookies)

El módulo está desarrollado por el usuario Vekia de la Comunidad de Prestashop.

El módulo, simplemente muestra un aviso en la parte inferior de la tienda en el que podemos configurar un texto adicional. (Si subimos el scroll hacia arriba o hacia abajo, veremos que podemos ver el aviso en todo momento)

Aviso del pie de página en Prestashop

La instalación y subida del módulo, sin problemas desde la pestaña módulos -> módulos

Instalando módulo en Prestashop para mostrar un aviso informativo en Prestashop

Las opciones de configuración que nos trae el módulo con las siguientes:

  • Mensaje -> Mensaje que se mostrara en el aviso.

    Mensaje de aviso
  • Sidebar height -> Altura del bloque.
  • Sidebar background color -> Fondo del bloque

    Fondo Bloque
  • Sidebar border size -> Borde del bloque

¿Dónde puedo descargar este módulo, discutir los problemas y preguntas las dudas?

Continúa leyendo Añadir aviso en el pie de página de Prestashop

Extensión de archivo incorrecta en Prestashop 1.7

A finales del año pasado, estuvimos comentando brevemente la sección de contacto en Prestashop 1.7.

En esta ocasión, vamos a hablar, por ejemplo, de que ocurre cuando un cliente sube un documento con extensión *.odt. en el formulario de contacto.

Simplemente, nos saldrá un error que dice “Extensión de archivo incorrecta“.

Extensión de archivo incorrecta en el formulario de contacto en Prestashop 1.7
Extensión de archivo incorrecta en el formulario de contacto en Prestashop 1.7

Si vamos al fichero:

/modules/contactform/contactform.php

Veremos que dentro de la función “public function sendMessage()” tenemos la siguiente línea de código:

$extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg');

Para añadir la extensión “.odt“, podríamos añadirla dentro del array

$extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg', '.odt');
Añadida nueva extensión en el formulario de contacto en Prestashop 1.7

¿Al intentar subir el fichero con extensión *.odt en el formulario de contacto me aparecerá el error de “Extensión de archivo incorrecta“?

En principio no, pero te en cuenta dos aspectos:

  • Siempre que puedas, es altamente recomendable hacer un override y evitar en todo lo posible editar los ficheros originales (en este caso lo ideal seria hacer un override de la clase del módulo y sobreescribir la función sendMessage)
  • ¿Cómo se hace un override de una clase de un módulo en Prestashop 1.7? -> Buscar en Google 🙂

Por cierto, espero que, en un futuro, exista la opción de permitir nuevas extensiones a la hora de subir los ficheros desde el panel de administración en el panel de Prestashop 1.7

Documento construido bajo Prestashop 1.7.1.2

Recibir una alerta de sonido al recibir un pedido en Prestashop

En esta ocasión, hablamos de un módulo que mostrara una notificación por sonido en el panel de administración cuando un cliente realice una compra en la tienda.

No confundir con las alertas de los pedidos por email en Prestashop

El módulo esta desarrollado por el usuario jgullstr de la Comunidad de Prestashop

La instalación y subida del módulo, como suele ser habitual, desde la pestaña módulos -> módulos

Instalando módulo que servirá para recibir una alerta por audio en el panel de administración de que un cliente ha realizado un pedido

El módulo, lleva ninguna opción de configuración adicional,

Si entráis en la configuración propia del módulo, veréis que simplemente se escucha la alarma a modo de demostración, pero que no permite ninguna opción de configuración adicional.

Configuración del módulo

Simplemente cuando el cliente haga un pedido en tu tienda, y tu estes en tu panel de administración se escuchara un audio de aviso.

Por otro lado el audio de sonido que se escucha, esta guardado en el directorio: “/modules/neworderalarm/media/

Si nos podemos a estudiar el código del módulo, vemos que en la clase del módulo “neworderalarm.php” que el módulo queda registrado en los dos siguientes hooks:

  • displayBackOfficeFooter -> Hook situado en el pie de página del panel de administración.
  • actionValidateOrder -> Hook que se ejecuta cuando se realiza el pedido.

¿Dónde puedo descargar el módulo para que en mi panel se escuche una alerta de audio cuando el cliente haga un pedido en la tienda?

  • https://www.prestashop.com/forums/topic/284580-module-new-order-alarm-ps-15/

Review realizado bajo Prestashop 1.6.1.14 y la versión “1.0.1” del módulo.

Plantilla verde y gratuita para Prestashop 1.7

En esta ocasión, hablamos de una plantilla gratuita para Prestashop 1.7, en la que el color verde prevalece sobre otros colores.

Esta plantillas gratuita para Prestashop 1.7, ha sido desarrollado por el usuario genweb de la Comunidad de Prestashop

El ancho del slider no está limitado al contenedor como en el de la plantilla por defecto de Prestashop 1.7. El slider es fullwidth

Los colores de la cabecera (el aspecto de la cabecera también está un poquito cambiado) y contenedor están cambiados.

El fondo del pie de página esta personalizado.

Ilustro en las siguientes capturas como se ve esta plantilla gratuita para Prestashop 1.7 en algunas secciones de la tienda.

Portada de una plantilla gratuita para Prestashop 1.7
Portada de una plantilla gratuita para Prestashop 1.7
Cabecera de la plantilla
Cabecera de la plantilla
Bloque de Productos destacados y parte central
Colores del pie de página personalizados en Prestashop 1.7
Colores del pie de página personalizados en Prestashop 1.7
Menú Horizontal en esta plantilla gratuita par Prestashop 1.7
Listado de productos
Ficha del Producto

La plantilla ha sido instalada en Prestashop 1.7.1.2 (no probada en toda su totalidad) sin grandes complicaciones -> Manual Instalación plantilla en Prestashop 1.7

¿Dónde se puede descargar esta plantilla gratuita para Prestashop 1.7?

Continúa leyendo Plantilla verde y gratuita para Prestashop 1.7

Bloques de texto personalizados en el pie en Prestashop 1.7

No estamos hablando de instalar contentbox/htmlbox en nuestra tienda, estamos hablando simplemente de cambiar de ubicación el módulo de texto que se muestra en la página principal al hook -> displayFooterBefore para que se vea en toda la tienda.

Por defecto el módulo Bloques de texto personalizados (custom_text), se muestra en la página principal, pero no en resto de secciones.

Texto de la página principal en Prestashop 1.7

Para que se vea en todas las secciones, vamos hacer tres cosas:

  • Eliminarlo del displayHome
  • Insertarlo en el displayFooterBefore
  • Colocarlo en la primera posición del displayFooterBefore

Vamos a la pestaña Diseño -> Posiciones de los módulos

Acceder a las posiciones de los módulos en Prestashop 1.7

Buscamos el bloque displayHome y desenganchamos el módulo de esa posición.

Quitar módulo de la página principal en Prestashop 1.7

Ahora en la misma pestaña Diseño-> Posiciones de los módulos, pinchamos el botón superior denominado (Insertar un hook (puede tener un nombre distinto en vuestro caso) )

Insertando modulo en hook en Prestashop 1.7

Y en el formulario seleccionamos:

Módulos -> Bloque de textos personalizados
Mover a -> displayFooterBefore

Insertando módulo en el displayFooterBefore

Por último, vamos a colocarlo en la primera posición del displayFooterBefore, para ello en la misma pestaña de Diseño -> Posiciones de los módulos, buscamos el bloque “displayFooterBefore” y arrastramos el módulo hacia arriba.

Subir módulo a primera posición del displayFooterBefore
Modulo en primera posición del displayFooterBefore

El resultado final es el siguiente:

Documento testeado en Prestashop 1.7.1.2

Seguimos sin tener el Live Edit (que en la 1.7 inicialmente lo desecharon) disponible que teníamos por ejemplo en la 1.6, para mover los módulos de posición “gráficamente” sin hacerlo manualmente, esperemos que en las próximas variantes de Prestashop 1.7.X.X, implementen el Live Edit para Prestashop 1.7