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.

Información: Este tutorial es para PrestaShop 1.6 🙂

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: