Cómo añadir campos en la ficha de productos del backoffice Prestashop
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:
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: