Jump to content
Eusebio100

[Aporte] Mostrar "Reposición" de productos

Recommended Posts

Esta es una de esas cosas que tenía pendientes y hoy ha sido el día.

A veces nos ocurre que reponemos algunos artículos que se han agotado y nos interesa mostrarlos, pero no como nuevos si no como "Reposiciones" y eso es lo que hace este aporte, adjunto imagenes de como se verían nuevo y reposición. Para ello utilizaremos la opción de productos nuevos de prestashop, lo que también nos sirve de contador de tiempo para mostrar la etiqueta de "Reposición".

Todo esto está hecho y probado en prestashop 1.6.1.20 y el tema por defecto, para otras versiones 1.6 no se como quedaría y para prestashop 1.7 no vale.

1) Paso 1: Lo primero de todo es poner la tienda en mantenimiento y hacer una copia de la bd, así mismo conviene mantener una copia de cualquier archivo que se modifique. 

2) Paso 2: Como utilizamos la funcionalidad de productos nuevos, debemos tener la posibilidad de modificar la fecha de alta del producto para que prestashop lo considere producto nuevo, para ello hay que tener instalado el siguiente aporte: 

 

3) Paso 3: Acceder al hosting e ir a phpmyadmin y crear la columna "restock" en las tablas ps_product y ps_product_shop, para ello ejecutar las siguientes consultas sql:

ALTER TABLE `ps_product` ADD `restock` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0';
ALTER TABLE `ps_product_shop` ADD `restock` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0';

Comprobar que efectivamente se han crado las columnas.

4) Paso 4: En el zip adjunto van los archivos AdminProductsController.php y Product.php; subirlos a las carpetas override/controllers/admin/ y override/classes/ respectivamente. Mirar que estos archivos no se encuentren ya en las mencionadas rutas, en caso de tenerlos hay que editarlos y añadir o modificar el contenido de los adjuntos.

5) Paso 5: Crear los checkbox en el admin para marcar los productos como reposición, podemos crear el check en la pestaña Precio o en la pestaña Información, cualquiera de las opciones es válida, pero utilizar solo una.

Opción A: crear el checkbox en la pestaña Precio, para ello abrir el archivo admin/themes/default/template/controllers/products/prices.tpl y buscar este bloque:

	<div class="form-group">
		<div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="on_sale" type="default"}</span></div>
		<label class="control-label col-lg-2" for="on_sale">&nbsp;</label>
		<div class="col-lg-9">
			<div class="checkbox">
				<label class="control-label" for="on_sale" >
					<input type="checkbox" name="on_sale" id="on_sale" {if $product->on_sale}checked="checked"{/if} value="1" />
					{l s='Display the "on sale" icon on the product page, and in the text found within the product listing.'}
				</label>
			</div>
		</div>
	</div>

Sustituir por:

<div class="form-group">
        <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="restock" type="default"}</span></div>
		<label class="control-label col-lg-2" for="restock">&nbsp;</label>
		<div class="col-lg-9">
			<div class="checkbox">
				<label class="control-label" for="restock" >
					<input type="checkbox" name="restock" id="restock" {if $product->restock}checked="checked"{/if} value="1" />
					{l s='Mostrar el icono "Reposición" en la página del producto y en el catálogo de productos.'}
				</label>
			</div>
		</div>
		<div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="on_sale" type="default"}</span></div>
		<label class="control-label col-lg-2" for="on_sale">&nbsp;</label>
		<div class="col-lg-9">
			<div class="checkbox">
				<label class="control-label" for="on_sale" >
					<input type="checkbox" name="on_sale" id="on_sale" {if $product->on_sale}checked="checked"{/if} value="1" />
					{l s='Display the "on sale" icon on the product page, and in the text found within the product listing.'}
				</label>
			</div>
		</div>
	</div>

Opción B: crear el checkbox en la pestaña Información, para ello abrir el archivo admin/themes/default/template/controllers/products/informations.tpl y buscar este bloque:

<label class="control-label col-lg-2" for="available_for_order">
					{l s='Options'}
				</label>
				<div class="col-lg-9">

Sustituir por:

<label class="control-label col-lg-2" for="available_for_order">
					{l s='Options'}
				</label>
				<div class="col-lg-9">
                    <div class="checkbox">
				        <label for="restock" >
					        <input type="checkbox" name="restock" id="restock" {if $product->restock}checked="checked"{/if} value="1" />
					{l s='Mostrar el icono "Reposición" en la página del producto y en el catálogo de productos.'}
				            </label>
			        </div>

6) Paso 6: Incluir el código para visualizar el resultado en los correspondientes listados, para ello modificaremos los archivos product.tpl y product-list.tpl de nuestro tema.

 En product.tpl buscar:

<div class="pb-left-column col-xs-12 col-sm-4 col-md-5">
			<!-- product img-->
			<div id="image-block" class="clearfix">
				{if $product->new}
					<span class="new-box">
						<span class="new-label">{l s='New'}</span>
					</span>
				{/if}

Sustituir por:

<div class="pb-left-column col-xs-12 col-sm-4 col-md-5">
			<!-- product img-->
			<div id="image-block" class="clearfix">
				{if $product->new}
                        {if $product->restock == 1 && $product->new == 1}
							<span class="new-box">
								<span class="restock-label">{l s='Reposición'}</span>
							</span>
						{else}
							<span class="new-box">
								<span class="new-label">{l s='New'}</span>
							</span>
						{/if}
                {/if}

En product-list.tpl buscar:

{if isset($product.new) && $product.new == 1}
							<a class="new-box" href="{$product.link|escape:'html':'UTF-8'}">
								<span class="new-label">{l s='New'}</span>
							</a>
						{/if}

Sustituir por:

{if isset($product.restock) && $product.restock == 1 && isset($product.new) && $product.new == 1}
							<a class="new-box" href="{$product.link|escape:'html':'UTF-8'}">
								<span class="restock-label">{l s='Reposición'}</span>
							</a>
						{/if}
                        {if isset($product.restock) && $product.restock == 0 && isset($product.new) && $product.new == 1}
							<a class="new-box" href="{$product.link|escape:'html':'UTF-8'}">
								<span class="new-label">{l s='New'}</span>
							</a>
						{/if}

7) Paso 7: Crear el css para la etiqueta "Reposición".

Abrir el archivo global.css de nuestro tema y añadir al final el siguiente código:

.restock-label {
  font: 700 12px/10px Arial, Helvetica, sans-serif;
  color: #fff;
  background: #008e01;
  text-transform: uppercase;
  padding: 10px 0 8px;
  text-shadow: 1px 1px rgba(0, 0, 0, 0.24);
  width: 130px;
  text-align: center;
  display: block;
  position: absolute;
  left: -33px;
  top: 16px;
  z-index: 1;
  -webkit-transform: rotate(-45deg);
  -ms-transform: rotate(-45deg);
  transform: rotate(-45deg); }
  .restock-label:before {
    position: absolute;
    bottom: -3px;
    right: 5px;
    width: 0px;
    height: 0px;
    border-style: solid;
    border-width: 4px 4px 0px 4px;
    border-color: #007101 transparent transparent transparent;
    content: ".";
    text-indent: -5000px;
    -webkit-transform: rotate(225deg);
    -ms-transform: rotate(225deg);
    transform: rotate(225deg); }
  .restock-label:after {
    position: absolute;
    bottom: -3px;
    left: 3px;
    width: 0px;
    height: 0px;
    border-style: solid;
    border-width: 4px 4px 0px 4px;
    border-color: #007101 transparent transparent transparent;
    content: ".";
    text-indent: -5000px;
    -webkit-transform: rotate(135deg);
    -ms-transform: rotate(135deg);
    transform: rotate(135deg); }

Ya solo queda borrar el archivo cache/class_index.php, limpiar la cache de smarty y también la del navegador por si acaso. Con esto ya debería funcionar, recordad que todo se refiere al tema por defecto, para otros temas puede que el resultado no sea el esperado.

Espero que a alguien le sirva.

nuevo.JPG

reposicion.JPG

Product-repo.rar

Edited by Eusebio100 (see edit history)
  • Thanks 1

Share this post


Link to post
Share on other sites

Probado y funcionando perfectamente :)

Me ha venido bien para marcar "Exclusivo".

Muchas gracias :D

Share this post


Link to post
Share on other sites
hace 54 minutos, freiserk dijo:

Probado y funcionando perfectamente :)

Me ha venido bien para marcar "Exclusivo".

Muchas gracias :D

Me alegro que te sirva, además es una buena idea el que se pueda utilizar para otras opciones, "Reposición" "Exclusivo" "Promoción", etc.

  • Thanks 1

Share this post


Link to post
Share on other sites
hace 1 hora, freiserk dijo:

Hay opción de aplicar esta modificación en 1.7.x.x ?

Supongo que sí, pero nunca he trabajado con ps 1.7 y no soy desarrollador, por lo que desconozco el procedimiento.

Share this post


Link to post
Share on other sites
Justo ahora, Eusebio100 dijo:

Supongo que sí, pero nunca he trabajado con ps 1.7 y no soy desarrollador, por lo que desconozco el procedimiento.

Gracias.

Pues a probar se ha dicho !!!

Saludos.

Share this post


Link to post
Share on other sites
hace 5 horas, freiserk dijo:

Gracias.

Pues a probar se ha dicho !!!

Saludos.

Te pongo este enlace por si te sirve de ayuda: https://stackoverflow.com/questions/43675696/add-field-in-product-prestashop-1-7

Además creo recordar que hay un modulo que permite cambiar la fecha de alta y está para ps 1.7, si lo encuentro pongo el enlace.

Edito: Este es el modulo al que me refería, la verdad es que tiene un precio muy asequible.

Edited by Eusebio100 (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Buenas tardes.

Me funciona todo, salvo que no aparece la palabra "Reposición" el fondo verde de la banderola, todo correcto menos eso. Otra cosa que me llama la atención los artículos New aparecen en rojo en vez de en color azul (aunque el color de fondo es azul). ¿Puede configurarse en algún otro sitio?

¿Podríais decirme algo?

Gracias

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More