Cómo añadir campos en la ficha de productos del backoffice Prestashop
5 (100%) 3 votos

Si alguna vez has necesitado más campo de un producto y que estos campos sean editables desde el backoffice de Prestashop (por ejemplo un campo de precio interno o un campo para un referencia interna), no te pierdas este post en el que te guiaré paso a paso de como crear nuevos campos en la ficha de producto en el backoffice de Prestashop.

Añadir un nuevo campo texto en el backoffice Prestashop

El primer punto, os enseñaré como añadir un nuevo campo de texto en el backoffice de Prestashop:

1.- Creación campo de texto en la base de datos

Primero, agregaremos el nuevo campo que vamos a crear a nuestra base de datos:

En la tabla _product, necesitamos agregar otra columna al final de la tabla, debemos nombrarla igual que nuestra variable:

ALTER TABLE `ps_product` ADD nuevo_campo TINYINT(1) default 0;
ALTER TABLE `ps_product_shop` ADD nuevo_campo TINYINT(1) default 0;

2.- Creación campo de texto en la base de datos

Ahora nos vamos a la parte de código, tenemos que conectarnos al FTP de nuestra tienda por ejemplo con FileZilla o el gestor que utilices e irnos a la carpeta override. Primero, creamos un fichero Product.php dentro de /override/classes en el que declararemos la variable del nuevo campo:

<?php
class Product extends ProductCore {
        public $nuevo_campo;
}

Ya creada la variable, vamos a aprovechar la clase de construcción del producto para agregar la definición completa del nuevo campo de la ficha de Producto:

<?php
class Product extends ProductCore {
   public $ nuevo_campo;

   public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) {
        self::$definition[‘fields’][‘ nuevo_campo’] = array(‘type’ => self::TYPE_STRING, ‘validate’ => ‘isString’);
        parent::__construct($id_product, $full, $id_lang, $id_shop);
   }
}

Como podemos ver en el código anterior, estamos apuntando la definición de nuestra variable en el paso 1  en el constructor de la clase ProductCore para añadir esta nueva variable a la ficha de un producto. Esta variable puede tener diferentes tipos que siempre será del mismo tipo que hemos definido en nuestra base de datos: TYPE_STRING, TYPE_FLOAT, TYPE_INT, TYPE_BOOL. Para validarla el tipo utilizaremos: isString, isInt, isBool.

Una vez hecho todo esto, tendremos que ir a la carpeta de caché y eliminar el archivo class_index dentro. Esto forzará a Prestashop a buscar todas las anulaciones y agregar nuestra nueva anulación de clase de producto en el sistema y decirle a Prestashop que use nuestro nuevo archivo.

3- Añadimos el campo texto en el backoffice

Ahora nos vamos a editar el fichero del backoffice para que aparezca el campo nuevo que hemos creado, nos vamos al directorio de /themes/default/template/controllers/products/informations.tpl y copiamos el fichero informations.tpl en /controllers/admin/templates/products/. Si no existe la ruta /controllers/admin/templates/products/, tendremos que crearla igual.

Ahora editamos el fichero informations.tpl y añadimos el siguiente código que creará el campo de texto en el backoffice de Prestashop:

<div class=”form-group”>
    <label class=”control-label col-lg-3″ for=”nuevo_campo”>
       <span class=”label-tooltip” data-toggle=”tooltip” title=”{l s=’Nuestro nuevo campo de David Calabuig’}”>
        {$bullet_common_field} {l s=’Nuevo Campo Texto Prestashop’}
    </span>
    </label>
    <div class=”col-lg-5″>
       <input type=”text” id=”nuevo_campo” name=”nuevo_campo” value=”{$product->nuevo_campo|htmlentitiesUTF8}” />
    </div>
</div>

Nota: Recuerda de borrar la cache o eliminar el fichero  class_index.

Añadir un nuevo campo booleano en el backoffice Prestashop

Ahora vamos a ver otra opción, esta vez el campo será booleano es decir Verdadero o Falso. Para añadir un nuevo campo booleano en la ficha de producto, tendremos que ser los mismos pasos que para un campo de texto pero con un añadido.

1.- Creación campo booleano en la base de datos

Primero creamos el nuevo campo boolean en la base de datos con la siguiente sentencia SQL:

ALTER TABLE `ps_product` ADD es_indexable TINYINT(1) default 0;
ALTER TABLE `ps_product_shop` ADD es_indexable TINYINT(1) default 0;

2- Añadir variable a la ficha de producto

Creamos el fichero Product.php en /override/classes y copiamos el siguiente código:

<?php
Class Product extends ProductCore {
    public $es_indexable;
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)  {
        self::$definition[‘fields’][‘es_indexable’] = array(‘type’ => self::TYPE_BOOL, ‘shop’ => true, ‘validate’ => ‘isBool’);
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}
?>

3- Añadimos el checkbox en el backoffice

Creamos un checkbox en la ficha del producto del backoffice de Prestashop en el fichero informations.tpl de /override/controllers/admin/templates/products/ sobre la línea 280 de código:

{include file=”controllers/products/multishop/checkbox.tpl” only_checkbox=”true” field=”online_only” type=”default”}
{include file=”controllers/products/multishop/checkbox.tpl” only_checkbox=”true” field=”es_indexable” type=”default”}

<div class=”checkbox”>
             <label for=”online_only”>
                 <input type=”checkbox” name=”online_only” id=”online_only” value=”1″ {if $product->online_only}checked=”checked”{/if} > {l s=’Online only (not sold in your retail store)’}</label>

</div>

<div class=”checkbox”>
     <label for=”es_indexable”>
          <input type=”checkbox” name=”es_indexable” id=”es_indexable” value=”1″ {if $product->es_indexable}checked=”checked”{/if} /> {l s=’No es indexable?’}</label>

</div>

 

4- Añadir variable a la ficha de producto

A diferencia de la variable de texto, en nuestro campo boolean tenemos que crear el fichero AdminProductsController.php en /override/controllers/admin con el siguiente código:

<?php

class AdminProductsController extends AdminProductsControllerCore {
        protected function copyFromPost(&$object, $table) {
             parent::copyFromPost($object, $table);
             if (get_class($object) != ‘Product’)
               return;

       $object->es_indexable = (int)Tools::getValue(‘es_indexable’);
     }
}

Y ahora en el backoffice en la pestaña Información nos aparecerá un checkbox que podremos seleccionar, como vemos en la siguiente imagen:

añadir campo personalizado booleano prestashop

Ya puedes crear tus campos personalizadas para añadir nueva información a tus productos como fecha de caducidad, precio de fábrica, etc. Si quieres contar con un programador experto en Prestashop, puedes dejar un comentario o rellenar el formulario de contacto.

Si quieres ver más posts útiles sobre Prestashop, no te pierdas: