Mostrar los codigos de barras en productos Prestashop
En este tutorial os enseñaremos a como mostrar los codigos de barras en los productos de nuestra tienda en Prestashop.
1. Modificar el template product.tpl.
El primer paso será modificar nuestro template product.tpl. Si no estamos usando combinaciones de productos este será el único paso que tendremos que completar para conseguirlo.
Nos dirigimos a nuestra carpeta de template en Prestashop y localizamos el product.tpl. Una vez ahí tenemos que decidir en que posicion vamos a mostrarlo (Arriba, abajo o incluso incluido en el producto).
1 | ean13) || !$product->ean13} style="display: none;"{/if} <label>{l s='Ean13:'} </label> ean13 $product->ean13} content="{$product->ean13}"{/if}{$product->ean13|escape:'html':'UTF-8'} |
Copiamos este codigo, lo colocamos donde creamos conveniente, guardamos el archivo y refrescamos nuestra pagina. Una vez hecho ya podremos ver el codigo de barras justo donde lo colocamos. Como hemos dicho previamente, si no estas usando combinaciones de productos este tutorial acabaría aqui, de otra manera hay un par de modificaciones que deberemos hacer y que explicaremos justo a continuacion.
2. Nuevo campo para las modificaciones.
Para mostrar correctamente el codigo apropiado al cambiar los atributos, debemos asegurarnos correctamente de que el campo en concreto este asignado al JavaScript que maneja la actualizacion de la pagina. Desafortunadamente Prestashop solo captura un limitado numero de campos para la consulta de combinaciones predeterminadas y, en consiguiente debemos modificar tanto el controlador como la clase ‘Producto’.
Para ello, nos dirigiremos a la carpeta de Prestashop y dentro de override/classes crearemos un archivo llamado Product.php y empezaremos escribiendo el siguiente codigo :
1 2 3 4 | class Product extends ProductCore { } |
Ahora queremos extender del metodo getAttributesGroups. Aqui tenemos un ejemplo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public function getAttributesGroups($id_lang) { if (!Combination::isFeatureActive()) { return array(); } $sql = 'SELECT ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, product_attribute_shop.`id_product_attribute`, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`, product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`, product_attribute_shop.`minimal_quantity`, product_attribute_shop.`available_date`, ag.`group_type` FROM `'._DB_PREFIX_.'product_attribute` pa '.Shop::addSqlAssociation('product_attribute', 'pa').' '.Product::sqlStock('pa', 'pa').' LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute` = pac.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON (ag.`id_attribute_group` = a.`id_attribute_group`) LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group`) '.Shop::addSqlAssociation('attribute', 'a').' WHERE pa.`id_product` = '.(int)$this->id.' AND al.`id_lang` = '.(int)$id_lang.' AND agl.`id_lang` = '.(int)$id_lang.' GROUP BY id_attribute_group, id_product_attribute ORDER BY ag.`position` ASC, a.`position` ASC, agl.`name` ASC'; return Db::getInstance()->executeS($sql); } |
Copia y pega este codigo en tu propio override, seguidamente añade otra columna en el SELECT, justo despues de ag.group_type
: , pa.upc
Extendiendo el Controlador Producto en Prestashop
Nos dirigimos a override/controller/front y creamos un archivo llamado ProductController.php. Dentro del colocamos el siguiente codigo :
1 2 3 4 | class ProductController extends ProductControllerCore { } |
En este momento deberemos copiar el metodo assignAttributesGroups, asi que asegurate que copias el original de Product Controller. Una vez copiado, debes localizar la siguiente linea de codigo.
1 | $combinations[$row['id_product_attribute']]['reference'] = $row['reference']; |
Y justo despues añade :
1 | $combinations[$row['id_product_attribute']]['upc'] = $row['upc']; |
Ahora, guardamos el archivo, borramos cache y eliminamos la clase class_index.php para que este override este en su lugar.
3. Mostrar el UPC con Javascript
El ultimo cambio que tendremos que hacer será modificar el archvo product.js, que se encuentra en la carpeta theme/js.
El primer bloque de codigo que tebemos que localizar es el siguiente, que se encuentra aproximadamente en la linea 93 :
1 | combinationsJS[k]['reference'] = combinations[i]['reference']; |
Y añadir lo siguiente :
1 2 3 4 5 6 7 8 9 | combinationsJS[k]['upc'] = combinations[i]['upc']; <pre> Ahora, nos situamos aproximadamente en la linea 427 : <pre> selectedCombination['reference'] = combinations[combination]['reference']; // add the following selectedCombination['upc'] = combinations[combination]['upc']; |
Por último, el mismo código que actúa sobre el boton :
1 2 3 4 5 6 7 8 9 10 | if (selectedCombination['reference'] || productReference) { if (selectedCombination['reference']) $('#product_reference span').text(selectedCombination['reference']); else if (productReference) $('#product_reference span').text(productReference); $('#product_reference:hidden').show('slow'); } else $('#product_reference:visible').hide('slow'); |
Y justo despues, añadimos :
1 2 3 4 5 6 7 8 9 10 | if (selectedCombination['upc'] || productean13) { if (selectedCombination['upc']) $('#product_upc span').text(selectedCombination['upc']); else if (productupc) $('#product_upc span').text(producteupc); $('#product_upc:hidden').show('slow'); } else $('#product_reference:visible').hide('slow'); |
Como podemos observar, nosotros no tenemos la variable productupc, para ello deberemos volver al archivo product.tpl y localizar la siguiente linea de codigo :
1 | {addJsDef productReference=$product->reference|escape:'html':'UTF-8'} |
Y añadir :
1 | {addJsDef productean13=$product->ean13|escape:'html':'UTF-8'} |
Guardamos, refrescamos y listo! Esto es todo, nos vemos en proximos tutoriales!