Se avecinan novedades importantes en Prestashop 1.7

Dentro del semanario que nos manda Prestashop, comentare algunos aspectos referentes a las tres últimas semanas (Semana 46, 47 y 48 de 2017)

  • La rama de desarrollo de Prestashop 1.7.3.X esta activa (#8530).
  • A partir de Prestashop 1.7.3.X se empieza a trabajar con Symfony3 (#8405).
  • Para la futura versión de Prestashop 1.7.4 es obligatorio trabajar como mínimo con PHP 5.6.X (requerimientos Prestashop), por lo que (aunque ya no estaba recomendado trabajar con versiones anteriores de PHP, pero ahora es obvio) olvidaros de trabajar con versiones de PHP descontinuadas.
  • La página de administración se migra a Symfony (#8365)

Más información en:

http://build.prestashop.com/news/coreweekly-week-46-2017/
http://build.prestashop.com/news/coreweekly-week-47-2017/
http://build.prestashop.com/news/coreweekly-week-48-2017/

Creación de un módulo de pago en Prestashop 1.7

Hace tiempo que no me paso por el blog francés de h-hennes, y a que resaltar que últimamente tiene unos artículos interesantes, donde traduciré parte de unos de los artículos que podéis ver de forma completa en su mismo blog y que me ha parecido que os puede interesar.

En este pequeño TIP rápido que es solo recomendado para aquellas personas que hayan tocado el desarrollo de módulos orientados a métodos de pago en versiones anteriores de Prestashop, comentare algunos aspectos básicos que se introducen como novedad en Prestashop 1.7 respecto a Prestashop 1.6.

A los módulos que gestionan los sistemas de pago, a que indicarles que usan la clase: PaymentOption (antiguamente esto no se hacía)

Es decir, la primera línea de código de la clase de un módulo que gestiona un sistema de pago es:

use PrestaShop\PrestaShop\Core\Payment\PaymentOption;
Indicar que usamos la clase PaymentOption
Indicar que usamos la clase PaymentOption

Por otro lado, la clase del módulo sigue heredando de PaymentModule (esto no ha cambiado)

 Clase del módulo hereda de PaymentModule
Clase del módulo hereda de PaymentModule

¿En que hooks queda instalado y registrado un módulo que gestiona un método de pago (transferencia bancaria, cheque, etc..) ?

Registrando módulo en hooks

Habitualmente queda registrado en los siguientes hooks:

  • paymentOptions -> Este hook si podemos decir que es nuevo, y es el que vemos cuando estamos viendo los métodos de pago en el proceso de pedido (a la hora de seleccionarlos)

    Listado de los métodos de pago en Prestashop 1.7
  • paymentReturn -> Este hook no tiene sorpresa porque es el mismo que se usaba en versiones anteriores para devolver la confirmación del pedido.

Vayamos a ver el interior de la función del hook -> paymentOptions que tiene por ejemplo la clase principal del módulo de Cheque (modules/ps_checkpayment/ps_checkpayment.php) que lleva Prestashop.

hookPaymentOptions

Dentro de la función de este hook, comento la parte más importante (obviando el resto que ya conocéis)

Aquí estamos creando un objeto de la Clase PaymentOption.

$newOption = new PaymentOption();

A través de ese objeto vamos a poder definir dentro del listado de métodos de pago, respecto al método actual los siguientes datos:

  • setCallToActionText : Define el texto/título público del método de pago / Obligatorio
    Texto del método de pago

    Mostrando el texto del método de pago
  • setAdditionalInformation : Define información adicional del método de pago  / Opcional
    Código información adicional del método de pago

    En el ejemplo del método de pago, lo que hacemos con “setAdditionalInformation” es integrar el fichero TPL payment_infos.tpl. (Fijaros al ampliar el pantallazo)

    Información adicional del método de pago en el listado de métodos de pago de Prestashop 1.7
  • setLogo : Definir un logo para el método de pago / Opcional
    Código logo método de pago en el listado de métodos

    Logo método de pago
  • setAction : Definimos el controlador que se encarga de la validación de la confirmación del pago (No visible ) / Es obligatorio si hemos usado el método setForm
    Controlador validación

    Estamos haciendo referencia en esta ocasión al controlador Validation.php del módulo que lo podemos encontrar en: ps_checkpayment/controllers/front/validation.php

  • setInputs : Permite añadir campos de formulario. Se usa más para campos de tipo oculto (hidden) que para que el cliente introduzca datos / OpcionalPor ejemplo, almacenamos en una variable “2 campos”
    $inputs = [
    [
    'name' => 'campo1',
    'type' => 'hidden',
    'value' => '100'
    ],
    [
    'name' => 'campo2',
    'type' => 'hidden',
    'value' => $this->context->customer->id,
    ],
    ];
    

    En el campo 1 guardamos el valor 100 y en el campo2 guardamos el ID del cliente.

    Ahora pasamos esos campos dentro de “setInputs

    Campos
  • setModuleName : Nombre del módulo (interno) / Obligatorio

    Nombre interno del módulo
  • setForm : Permite generar un formulario especifico para el módulo, si se utiliza, las funciones setInputs y setAction no tienen efecto / Opcional
    Formulario

    Dentro del método/función setForm hemos integrado el contenido del TPL: modules/ps_checkpayment/views/templates/hook/formularioprueba.tpl donde hemos preparado el formulario.

    Formulario dentro de método de pago
  • setBinary :  Solo es necesario si se utiliza una ejecución binaria. Es necesario también que el módulo este también anclado en el hook -> displayPaymentByBinaries

Continúa leyendo Creación de un módulo de pago en Prestashop 1.7

MiniTip para crear dependencias de módulos en Prestashop

MiniTIP de desarrollo para indicar en el código de un módulo que el módulo en cuestión no puede instalarse sin que se haya instalado un determinado módulo previamente.

Para acceder a este “MiniTIP” de desarrollo, tenéis que pinchar la siguiente imagen:

MiniTIP para gestionar dependencias en los módulos en Prestashop

Tipos de campos de los formularios (HelperForm) en Prestashop

Introducción (leer atontados)

No voy a comentar todos los tipos de campos disponibles para usar en Prestashop, pero espero que los que vaya comentando junto con su explicación de forma detallada os sirva de ayuda.

Aquí solo hablamos de la generación de formularios no de guardar esos datos y obtener los valores de los formularios, cosa que tenéis explicada en el blog en varios TIPS desde hace años.

Empecemos:

Por ejemplo, en la pestaña Diseño -> Páginas  al editar unos de los contenidos o crear uno nuevo, veremos que tenemos los siguientes campos disponibles:

Campos

Al acceder al controlador: /controllers/admin/AdminCmsController.php

Veremos dentro de:  $this->fields_form = array( … ‘input’ => array los campos del formulario:

Campos

El formulario se inicia a partir de: $this->fields_form = array(

Inicio formulario

Donde podemos ver la etiqueta/título del formulario y el icono

Etiqueta formulario
Etiqueta formulario
Etiqueta formulario
Icono formulario
Icono formulario
Icono formulario

La opción: tinymce es para activar el editor TinyMCE (el típico editor que veis en las descripciones para colocar negritas, añadir imágenes, etc..) en el formulario. Posteriormente podemos indicar en que campo queremos activarlo o dejar de activarlo.

A continuación, dentro de:  ‘input’ => array( … )’ visualizamos los campos del formulario.

Y cuando cerramos el array de campos (input) metemos los botones del formulario (para guardar los cambios, etc..)

Botones

En este TIP, vamos a hablar de algunos de los campos que vemos en la sección de la ficha de edición a la que hacemos referencia, si en algún momento hablamos de otro campo distinto a los indicados en la captura inicial comentaremos donde hemos visto el campo.

Tipos de campo: Lista desplegable (HelperForm)  en Prestashop

Siguiendo lo que habíamos comentado anteriormente, vamos a ver los tipos de campos que teníamos disponible al editar un contenido en la pestaña Diseño -> Páginas

Controlador: /controllers/admin/AdminCmsController.php

Vemos el campo “categoría de la página de contenidos“:

Categoría página

Correspondiente al siguiente código:

  • type -> tipo del campo (En este caso select_category)
  • label -> Etiqueta del campo

    Etiqueta campo
    Etiqueta campo
  • name -> nombre interno del campo
  • options -> Recordamos que este campo es una lista desplegable (select). En este caso estamos cargando el array de categorías en los valores del campo
    Lista desplegable
    Lista desplegable

    Si intentamos ver en el fichero el valor de la variable, veremos la siguiente asignación:

    Asignación variable
    Asignación variable

    Donde estamos obteniendo los valores de las categorías de los contenidos que hemos creado en la pestaña Diseño -> Páginas

    Los esta cargando de la función: recurseCMSCategory de la clase /classes/CMSCategory.php

Función recurseCMSCategory
Función recurseCMSCategory

Por ejemplo, en la pestaña Clientes -> Clientes vemos en la ficha de edición de los Clientes el “Grupo de clientes predeterminado

Selector

Al acceder al fichero: controllers/admin/AdminCustomersController.php lo encontramos en esta parte del código:

Tipo lista desplegable

type -> select (para indicar que es un campo de lista desplegable)
label -> Etiqueta del campo
name -> nombre interno
options -> valores del campo (lista)
hint -> texto que se muestra al pasar el ratón sobre el nombre del campo

Tipos de campo: Texto (HelperForm)  en Prestashop

Siguiendo con la ficha de edición de un contenido en la pestaña Diseño -> Páginas, observamos el campo “Meta descripción“.

Campo

Al acceder al controlador/controllers/admin/AdminCmsController.php vemos el siguiente código:

Campo de tipo texto

En type viene indicado “text” para indicar que es un campo de tipo texto.

En label, recordamos que es la etiqueta del campo.

Etiqueta campo

name -> nombre interno del campo

lang -> Para indicar si el campo es multilenguaje o no

multilenguaje

hint -> Información que aparece al pasar el ratón sobre el campo

Información adicional

Tipos de campo: Tags/Etiquetas (HelperForm)  en Prestashop

Seguimos en la ficha de edición de una página de contenidos en la pestaña Diseño -> Páginas y nos fijamos en el campo de “Meta Keywords / Meta palabras claves”

Campo etiquetas
Campo etiquetas

Al acceder al controlador/controllers/admin/AdminCmsController.php vemos el siguiente código (referente a dicho campo) :

Tipo de campo tags

type -> “tags” para indicar que es un campo de tipo etiquetas
label -> Etiqueta del campo
name -> nombre interno del campo
lang -> para indicar que el campo es multilenguaje.
hint -> Como hemos comentado antes, al pasar el ratón sobre el nombre del campo muestra información adicional.

Tipos de campo: Switch – Selección (HelperForm)  en Prestashop

Para no aburrirnos, seguimos con la ficha de edición de una página de contenidos en la pestaña Diseño -> Páginas

A continuación, vemos el campo “Indexación por motores de búsqueda” que nos ofrece entre seleccionar Sí o No.

switch

Al acceder al controlador/controllers/admin/AdminCmsController.php observamos el siguiente código:

switch

type -> switch
label -> etiqueta del campo
name -> nombre interno del campo
required -> para indicar si el campo es obligatorio.
values -> valores del campo

Valores del campo

Tipos de campo: Textarea/campo de texto en Prestashop (HelperForm)

Seguimos con la fiesta con la pestaña Diseño -> Páginas.

Nos encontramos con el campo del contenido de la página.

textarea

Cuando accedemos al controlador/controllers/admin/AdminCmsController.php observamos el siguiente código:

Código campo textarea
Código campo textarea

type  -> textarea para indicar el tipo de campo en cuestión.
label -> etiqueta del campo.
name -> nombre interno del campo.
autoload_rte -> para indicar si nos aparecerá el editor en el panel en el campo en cuestión.

Opción activada

Editor activado

Opción desactivada

Editor desactivado

lang -> para indicar si el campo es multilenguaje
rows y cols las típicas opciones de filas y columnas del tamaño del campo a la hora de visualizarlo.
hint -> Nota informativa que se visualiza cuando pasas el ratón sobre el nombre del campo

Tipos de campo: Campo selector de tiendas (HelperForm) en Prestashop

Seguimos dentro de la pestaña Diseño -> Páginas 

Campo tiendas

Controlador: /controllers/admin/AdminCmsController.php

Campo selector tiendas

En este ejemplo, como hemos salido de ‘input’ => array( … )’ (array de campos) y  también  del formulario lo que hacemos es meterlo directamente dentro del array con:

$this->fields_form[‘input’][] = array(

type -> “shop” para indicar que es un tipo de campo de tiendas
label -> etiqueta informativa
name -> nombre interno del campo

Tipo de campo: Campo contraseña (HelperForm) en Prestashop

Al acceder a la pestaña Clientes -> Clientes del panel de administración e intentar añadir un cliente o editar uno existente, veremos en el formulario del cliente entre otros campos disponibles el campo de contraseña:

Campo contraseña

Al acceder al controlador:

/controllers/admin/AdminCustomersController.php

Vemos el código de visualización del campo aquí:

Campo contraseña

type -> password para indicar que es un campo de tipo contraseña.
label -> Etiqueta del campo.
name -> nombre interno.
required -> para indicar si es o no obligatorio.
hint -> texto que se muestra al pasar el ratón sobre el nombre del campo.

Tipo de campo: Campo Email (HelperForm) en Prestashop

Seguimos con la pestaña Clientes -> Clientes y controlador:  /controllers/admin/AdminCustomersController.php

Campo email

Código:

Campo email

Realmente es un campo de tipo de texto, perocomo podéis ver en el “type”, la única variación es que en “prefix le añadimos la instrucción para que muestre el icono del correo:

Icono Email
Icono Email
Icono Email

Tipo de campo: Campo fecha/cumpleaños (HelperForm) en Prestashop

Siguiendo con el panorama en la pestaña Clientes -> Clientes

Fecha nacimiento
Fecha nacimiento

Código del campo en el fichero:  /controllers/admin/AdminCustomersController.php

Campo fecha de cumpleaños

type -> birthday para indicar que estamos trabajando con este tipo.
label -> Etiqueta el campo
name -> nombre interno del campo
options -> valores del campo, en este caso estamos cargando los días, meses y años.

Valores del campo

Por cierto, le estamos pasando la variable $days, $months y $years  que tiene el valor de días, meses y años porque antes las hemos declarado en la clase.

Obtener días, meses y años

Tipo de campo: Campo Radio / selección única  (HelperForm) en Prestashop

Siguiendo con el panorama en la pestaña Clientes -> Clientes

Campo selección única

Vemos el código de este campo en el fichero:  /controllers/admin/AdminCustomersController.php aquí:

Para no repetir lo mismo que hemos repetido, simplemente comentar el “type -> radio

Por otro lado en “values” cargamos los valores del campo, que en este caso los esta cargando de la variable $list_genders, que realmente tiene este valor:

Lo que hacemos es obtener los géneros/tratamientos que hemos configurado.

Tipo de campo: Grupo de campos con CheckBock   (HelperForm) en Prestashop

Ya que estamos en la pestaña Clientes -> Clientes y  como no queremos movernos mucho observemos el campo: “Acceso a grupo

Acceso a grupo

Al observar el código del campo en el fichero:

/controllers/admin/AdminCustomersController.php

Veremos:

group

type -> group.
name -> nombre interno del campo.
label -> etiqueta de campo.
values -> valores del campo. Aquí estamos cargando los grupos de clientes creados en Prestashop.

¿Qué contiene la variable $groups?

Valor almacenado en la variable groups
Valor almacenado en la variable groups
Función getGroups
Función getGroups

Obtenemos el grupos de clientes gracias a la función getGroups de la clase Group

Tipos de campo: Botones en los formularios de Prestashop (HelperForm)

Seguimos dentro de la pestaña Diseño -> Páginas.

Botones “Guardar y previsualizar” y “Guardar

Botones

Controlador/controllers/admin/AdminCmsController.php

Al cerrar el: ‘input’ => array( … )’ (array de campos) pero dentro de  $this->fields_form = array() vemos los botones disponibles que mostramos en la captura anterior

Botón guardar:

botón “guardar y previsualizar

array botones
array botones

Dentro del array de botones encontramos el botón “Guardar y previsualizar” (buttons => array { botón de guardar y previsualizar (save_and_preview)
name -> nombre interno del botón
type -> submit
title -> título del botón

Título botón

icon -> icono del botón

Icono del botón

class -> clase del botón.

Necesita investigar más…

  • Pásate por el directorio: /classes/helper/ y revisa las clases.
  • Investiga como usan los controladores del panel de administración:  /controller/admin/ el tema de los formularios y campos. Fíjate que aquí hemos hablado de 2 controladores…
  • Pásate por las clases de los módulos /modules/nombre_modulo/nombre_clase.php e investigan como usan los módulos los formularios (dentro de la función renderForm) además veras que necesitan crear una instancia de la clase HelperForm para la generación del formulario, como estuvimos comentando en su momento por el blog hace unos 2 años. Usar buscador del blog 🙂

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

Widget en Prestashop – módulo en cualquier posición – Prestashop 1.7

Tenéis redactado en el blog un documento para entender el nuevo sistema de widget que incorpora Prestashop 1.7 y que permite mostrar un módulo en cualquier parte de la tienda, sin necesidad de crear un hook, ni de moverlo de posición.

Para acceder al documento, debéis pinchar aquí:

Eliminar tratamiento (género) en el formulario de registro de Prestashop

Tratamiento en el formulario de registro

Como tenemos explicado en la gestión de clientes podemos crear o quitar nuevos tratamientos en la pestaña Parámetros de la tienda -> Ajustes sobre clientes -> Tratamientos

Listado tratamientos clientes

El problema es que incluso eliminando los tratamientos se queda la “etiqueta” en el formulario de registro.

Etiqueta vacía

A día 8 de abril del 2017, no tenemos opción de quitarlo desde el panel de administración (en futuro posiblemente se pueda) y tenemos que aplicar por ejemplo la siguiente solución:

Ir al fichero:

/classes/form/CustomerFormatter.php

Y comentar el código referente al campo de genero/tratamiento:


$genderField = (new FormField)
->setName('id_gender')
->setType('radio-buttons')
->setLabel(
$this->translator->trans(
'Social title', [], 'Shop.Forms.Labels'
)
)
;
foreach (Gender::getGenders($this->language->id) as $gender) {
$genderField->addAvailableValue($gender->id, $gender->name);
}
$format[$genderField->getName()] = $genderField;

Comentar código

Además, en el fichero: /classes/controller/FrontController.php

Comentamos el código:

$cust['gender'] = $this->objectPresenter->present(new Gender($cust['id_gender']));
unset($cust['id_gender']);
Comentar código

Aquí, hemos editado las clases directamente, pero lo recomendable es crear un override.

Documento testeado en Prestashop 1.7.1.0

Limitar número de productos en el carrito en Prestashop

Traducción de la guía realizada por el usuario Nemo de la Comunidad de Prestashop

Limitar números de productos en el carrito en Prestashop 1.6
Limitar número de productos en el carrito en Prestashop 1.6

Según nos indica Nemo, el tutorial es para Prestashop 1.6

Imaginemos que queremos que, en el carrito, no puedan existir más de 5 productos en total.

Recordamos que lo mejor es hacer un override de los Clases y Controladores que se vayan a modificar.

En el fichero:

/controllers/front/CartController.php

Dentro de la función:

processChangeProductInCart


Debajo de la línea: (En Prestashop 1.6.1.12, sobre la línea 241)

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

Añadimos la siguiente


$total_cart_produtcs_count=0;

Ahora un poco más abajo, donde tenemos esta línea:


foreach ($cart_products as $cart_product) {

Añadimos:


$total_cart_produtcs_count+=$cart_product['cart_quantity'];

Almacenamos en la variable total_cart_produtcs_count el número total de productos que se van añadiendo al carrito.

Ahora justo antes de este comentario:

// Check product quantity availability

Añadimos:


$max_qty = 5;
		if(Tools::getValue('op', 'up')=='up' && $mode=='add')
		{
			if (count($cart_products) == $max_qty || $total_cart_produtcs_count + $this->qty > $max_qty)
				$this->errors[] = sprintf(Tools::displayError('El limite de productos en el carrito son %s'), $max_qty);
			
		} 

  • En la variable “max_qty” indicamos el límite máximo de productos que se pueden añadir al carrito.
  • En el primero IF se chequea cuando se añade/actualiza productos al carrito.
  • En el segundo IF contamos los productos añadidos al carrito y los comparamos con el límite que hemos establecido
  • Si se cumplen los dos IF, imprimimos el mensaje de que se ha llegado al límite de productos que se pueden añadir al carrito.

Esta traducción, puede contener errores o quedar desactualizada en el momento en el que vayáis a ver este post, revisarla siempre con el tutorial de Nemo:

Imagen de previsualización de YouTube

Restringir método de pago por importe en Prestashop

* El documento ha sido actualizado para su funcionamiento en Prestashop 1.7 (al menos hasta la 1.7.2.4)

La idea es que podamos ocultar un método de pago especifico en base al importe total del pedido.

En este ejemplo, vamos a indicar como podemos ocultar el método de pago con cheque en base a un importe mínimo o máximo.

Aunque vamos a trabajar con la clase original del módulo, recordar que lo optimo es hacer un override de la clase.

Si vamos a la clase del módulo (correspondiente al cheque), es decir, al fichero:

/modules/ps_checkpayment/ps_checkpayment.php

Dentro de la función del hook ->  hookPaymentOptions

Recogemos el valor del pedido:

$importePagado = $params['cart']->getOrderTotal();

Realizamos una condicional, indicando si el importe del pedido es menor de 50 dentro de X moneda no mostramos el módulo.

	if ($params['cart']->id_currency  == 1 && $importePagado<50) {
            return;
        }

En este condicional estamos comprobando si el id de la moneda (moneda actual) es 1 y el importe pagado es menor de 50 no mostramos el módulo.

Si tenemos varias monedas debemos realizar las comprobaciones para las distintas monedas indicando el importe limite.

Código

Para Prestashop 1.6, es dentro de la función del hook public function hookPayment($params)