Crear campos en los transportistas en Prestashop

Crear nuevo campo en los transportistas en Prestashop 1.7

Documento donde vamos añadir un campo nuevo en los transportistas en Prestashop 1.7.

Este documento ha sido probado en Prestashop 1.7.2.4. Lo digo porque existe la posibilidad de que en futuras variantes de Prestashop 1.7.X no sea válido y se haga de forma totalmente diferente.

Añadir campo en la base de datos

En nuestro caso vamos añadir un campo de tipo VARCHAR de 64 caracteres de longitud denominado “campo_prueba“.

El campo lo vamos añadir en la tabla: ps_carrier (recordar que yo digo “ps_” debido a que es el prefijo de las tablas de mi instalación de Prestashop, en vuestro caso este dato puede variar, es solo un aviso para navegantes).

El campo lo podemos añadir fácilmente desde phpMyAdmin bien gráficamente o generando la consulta.

Campo nuevo en la base de datos en la tabla ps_carrier

Consulta SQL para avanzados:

Consulta SQL para añadir campo

Crear override de la clase Carrier

En el override de la clase Carrier vamos definir el nuevo campo que hemos creado en la tabla ps_carrier.

Recordar que el override de la clase Carrier se guarda en el directorio /override/classes/ 

Creamos el fichero Carrier.php con este contenido:

Override de la clase Carrier
Override de la clase Carrier

Dentro del contenido del override de la clase Carrier vamos a pegar de la clase original (/classes/Carrier.php) el código de “public static $definition” (que es el correspondiente a la definición de los campos de la tabla ps_carrier).

public static $definition = array

Ahora mismo el override tiene el siguiente contenido:

Override clase Carrier

En este override nos quedan “2” puntos.

Añadir un atributo publico al override de la clase Carrier.

Atributo público del override de la clase Carrier

Añadir la definición del campo que hemos creado en la base de datos dentro de “public static $definition = array( ‘fields’ => array(

Definición campo

El override de la clase Carrier quedara del siguiente modo:

Override de la clase Carrier

Podéis descargar el override aquí (esta comprimido en zip): Descargar (recordar que debéis guardarlo en el directorio /override/classes/)

Crear override del controlador: AdminCarrierWizardController

El override del controlador AdminCarrierWizardController se guarda en el directorio /override/controllers/admin/

Creamos el fichero AdminCarrierWizardController.php con este contenido:

Override del controlador AdminCarrierWizardController

Copiamos del controlador original /controllers/admin/AdminCarrierWizardController.php las funciones: renderStepOne y getStepOneFieldsValues

En las funciones que hemos pegado en el override tenemos que hacer los siguientes cambios:

Dentro de la función: renderStepOne añadimos el campo que se mostrara para rellenar en el primer paso de configuración del transportista. Lo hacemos dentro de $this->fields_form = array( ‘form’ => array( .. ‘input’ => array(

Hemos añadido:

Código añadido en la función renderStepOne

text -> Campo de tipo texto

label -> etiqueta del campo  (traducible para los idiomas que tengas en la tienda  activados desde el panel de la misma tienda)

label

name => nombre interno del campo para luego recoger/mostrar el valor.

hint => cuando pasas el ratón sobre el campo te muestra el texto (traducible para los idiomas que tengas en la tienda  activados desde el panel de la misma tienda)

Hint

No pego la función entera, pero al final del documento tenéis el override para descargarlo.

Por último en la función: getStepOneFieldsValues añadimos dentro del return array:

Código añadido dentro de la función getStepOneFieldsValues

Para obtener el valor del campo de prueba

Quedando la función del siguiente modo:

Función getStepOneFieldsValues modificada

Podéis ver y descargar el override aquí: Descargar

Si todo es correcto, a la hora de crear o modificar un transportista veremos en su primer paso de configuración un nuevo campo.

Nuevo campo en el formulario de configuración del transportista

Antiguamente para que os detectara Prestashop los override introducidos manualmente teníamos que eliminar el fichero /cache/class_index.php, en la actualidad el fichero a eliminar es el fichero   /app/cache/prod(y dev))/class_index.php (no preocuparse, el fichero se regenera automáticamente). En la actualidad también si limpiáis la cache en la pestaña Parámetros Avanzados -> Rendimiento se regenera el fichero en cuestión sin necesidad de eliminarlo manualmente.

Descargar overrides construidos en este aporte: Descargar

Recordar:

Override de la clase Cart se guarda en el directorio: /override/classes/
Override del controlador AdminCarrierWizardController.php
se guarda en el directorio:  /override/controllers/admin/


Actualización del artículo (24/09/2018):

El directorio => /app/cache/ ahora se encuentra en /var/app/cache/