Como añadir nuevos estados al producto en PrestaShop
PrestaShop por defecto permite indicar 3 estados sobre los productos: nuevo, usado y reacondicionado.
¿Qué sucede si queremos añadir más estados en nuestra tienda? ¿Cómo lo podemos hacer? Siento decirte que los estados del producto no son administrables. Requiere intervención técnica para añadir nuevos estados.
En este artículo te vamos a explicar cómo agregar nuevos estados del producto de la forma más correcta, fácil y rápida en una tienda que utiliza PrestaShop 1.6.1.11.
Con las nuevas formas de vender que hay actualmente los productos pueden presentar infinidad de estados que se podrían considerar. En el ejemplo que vamos a ilustrar queremos añadir un nuevo estado para el producto: “No funciona” que conseguiremos en 5 pasos:
1- Edición de la base de datos
Lo primero que haremos será ir a la base de datos de la tienda y editar el conjunto de valores del campo “condition” para las tablas “ps_product” y “ps_product_shop” dejándolo con los siguientes valores: ‘new’,’used’,’refurbished’,’notwork’. Hemos añadido el ‘notwork’ que representará el valor de “No funciona”.
2- Sobrescritura de la clase Product
Es necesario sobrescribir el archivo clases/Product.php. Para ello debes crear un nuevo archivo PHP con el nombre Product.php y deposítalo en overrides/clases/Product.php de tu proyecto PrestaShop con el siguiente contenido:
class Product extends ProductCore
{
public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{
parent::$definition['fields']['condition'] = array('type' => self::TYPE_STRING, 'shop' => true, 'validate' => 'isGenericName', 'values' => array('new', 'used', 'refurbished', 'notwork'), 'default' => 'new');
parent::__construct($id_product, $full, $id_lang, $id_shop);
}
}
3- Actualización del selector de estado del backoffice
Ahora iremos a modificar el selector de estado del producto en el backoffice. Para ello será necesario encontrar el siguiente archivo:
adminxxx/themes/default/template/controllers/products/informations.tpl
Dentro de este archivo buscaremos la palabra clave “condition” y en seguida veremos el selector de condición del formulario de añadir producto del backoffice.
<select name="condition" id="condition">
<option value="new" {if $product->condition == 'new'}selected="selected"{/if} >{l s='New'}</option>
<option value="used" {if $product->condition == 'used'}selected="selected"{/if} >{l s='Used'}</option>
<option value="refurbished" {if $product->condition == 'refurbished'}selected="selected"{/if}>{l s='Refurbished'}</option>
</select>
Añadimos la nueva opción con el valor que le dimos en la base de datos y su traducción:
<select name="condition" id="condition">
<option value="new" {if $product->condition == 'new'}selected="selected"{/if} >{l s='New'}</option>
<option value="used" {if $product->condition == 'used'}selected="selected"{/if} >{l s='Used'}</option>
<option value="refurbished" {if $product->condition == 'refurbished'}selected="selected"{/if}>{l s='Refurbished'}</option>
<option value="notwork" {if $product->condition == 'notwork'}selected="selected"{/if}>{l s='Not Work'}</option>
</select>
Al actualizar el backoffice veremos que ya aparece la nueva condición para el producto. A partir de ahora ya puedes seleccionar la nueva opción y al pulsar en guardar quedará registrada para el producto.
4- Modificación de la plantilla
Es importante modificar el archivo product.tpl de la plantilla activa para que el nuevo estado aparezca en la parte frontal.
Tendremos que abrir el product. tpl y buscar la palabra clave “condition”. En seguida encontrarás el bloque donde aparece la condición en la ficha del producto:
<p id="product_condition">
<label>{l s='Condition:'} </label>
{if $product->condition == 'new'}
<link itemprop="itemCondition" href="https://schema.org/NewCondition"/>
<span class="editable">{l s='New product'}</span>
{elseif $product->condition == 'used'}
<link itemprop="itemCondition" href="https://schema.org/UsedCondition"/>
<span class="editable">{l s='Used'}</span>
{elseif $product->condition == 'refurbished'}
<link itemprop="itemCondition" href="https://schema.org/RefurbishedCondition"/>
<span class="editable">{l s='Refurbished'}</span>
{/if}
</p>
Añadimos la condicional para el nuevo estado:
<p id="product_condition">
<label>{l s='Condition:'} </label>
{if $product->condition == 'new'}
<link itemprop="itemCondition" href="https://schema.org/NewCondition"/>
<span class="editable">{l s='New product'}</span>
{elseif $product->condition == 'used'}
<link itemprop="itemCondition" href="https://schema.org/UsedCondition"/>
<span class="editable">{l s='Used'}</span>
{elseif $product->condition == 'refurbished'}
<link itemprop="itemCondition" href="https://schema.org/RefurbishedCondition"/>
<span class="editable">{l s='Refurbished'}</span>
{elseif $product->condition == 'notwork'}
<link itemprop="itemCondition" href="https://schema.org/NotworkCondition"/>
<span class="editable">{l s='Not work'}</span>
{/if}
</p>
Como podrás ver, el texto “Not work” es traducible. Por defecto es conveniente ponerlo en inglés. Al traducirlo quedaría algo así:
5- Actualización del bloque de navegación por facetas
Para los que usan el módulo de bloque de navegación por facetas que trae por defecto PrestaShop, aun tienen que hacer un pequeño cambio para que aparezca el nuevo estado en el filtro. Será necesario editar o hacer una sobrescritura del módulo “blocklayered” editando el archivo principal blocklayered.php. Puedes buscar “refurbished” y añadir de la misma forma que están los otros estados el nuevo estado. De esta forma ya podremos observar el nuevo estado en la navegación por facetas:
Si te ha servido este tutorial hazte fan de la página de facebook del blog Jose Aguilar y estate al tanto de nuestra novedades.
No te acaba de salir y necesitas ayuda. Contrata un profesional que te lo haga
Realice el procedimiento, funciono correcto, pero no me despliega el titulo que agregue en la tienda (backoffice).
Hola que tal? Estoy siguiendo el tutorial. Pero no encuentro el archivo informations.tpl. Sera que cambió a la version de ahora? Porque no aparece. Saludos.
En versiones actuales de PrestaShop ha cambiado mucho este asunto y se debe resolver de otra forma. Esta solución es útil en PrestaShop 1.6
Hola José Aguilar estoy intentado poner en mi web, productos en precedido, pero que salgan en el index, como en los bloques de nuevos, y novedades o destacados, hacer uno que ponga prepedidos, o modificar el bloque de novedades, eso se podría hacer?? Llevo días buscando tutorinales y no encontré o nada claro. Gracias
Hola que tal,
Para este tipo de ayudas que se salen de lo que hay disponible en el blog lo que podemos hacer es que nos envíes un correo a blog@jose-aguilar.com con todos los detalles para que revisemos como podemos proceder.
Lógicamente no habrá nada para su necesidad. Requiere intervención de un programador para mostrar los productos con estado «precedido».
Saludos