Produto disponível em data futura para PrestaShop

Postado em Atualizado em

Há situações em que desejamos que um ou mais produtos sejam mostrados, mas não postos imediatamente à venda.
Desta forma o cliente saberia de sua existência e quando ele poderia comprá-lo.

Uma solução para isso é alterando via código alguns arquivos, de modo que:

No back office haja a possibilidade de estipular data em que o produto estará disponível;
No front office o botão para comprar seja desabilitado e uma mensagem seja mostrada com a data de disponibilidade do produto.

Os arquivos com as modificações estão disponíveis para descarga, mas caso já tenha anteriormente modificado algo em algum deles, segue abaixo as modificações necessárias:

Arquivos a modificar:

/admin/tabs/adminproducts
/classes/product.php
/themes/yourtheme/products.tpl
/themes/yourtheme/products-list.tpl

A primeira coisa é adicionar uma coluna extra à tabela dos produtos, rodando uma consulta Sql no phpMyadmin ou outra ferramenta de administração do Mysql:

Nota: Substitua ps se possui outro prefixo para as tabelas do seu banco de dados.

alter table ps_product add column date_available date

Abra admin/tabs/adminproducts

Encontre mais ou menos na linha 1253 ’.$this->l(‘Manufacturer:’).’


e adicione antes dela o seguinte código:


'.$this->l('Available from:').' getFieldValue($obj, 'date_available') AND $from != '0000-00-00' AND $from != '1942-01-01') ? $from : date('Y-m-d')).'" />

'.$this->l('Enter the date available for this product').'

Abra classes/product.php e encontre mais ou menos a linha 144:

/*** @var array Tags */
public $tags;

Após ela adicione o seginte código:

/** @var date_available */
public $date_available = '1942-01-01';

Encontre a linha 168:

'reduction_to' => 'isDate',

Após ela adicione o seguinte código:

'date_available' => 'isdate',

Encontre a linha 239:

$fields['date_upd'] = pSQL($this->date_upd);

Afpós ela adicione o seguinte código:

$fields['date_available'] = pSQL($this->date_available);

Abra /themes/yourtheme/products.tpl e encontre a linha 82:

var noTaxForThisProduct = {if $no_tax == 1}true{else}false{/if};

Após ela adicione o seguinte código:

var date_available = '{$product->date_available}';

Encontre a linha 203

quantity == 0 && !$product->available_later) || (!$product->available_now && $display_qties != 1) } style="display:none;"{/if}>
{l s='Availability:'}
quantity == 0} class="warning-inline"{/if}>
{if $product->quantity == 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}

E substitua pelo seguinte código:

quantity == 0 && !$product->available_later) || (!$product->available_now && $display_qties != 1) } style="display:none;"{/if}>
{l s='Availability:'}
quantity == 0} class="warning-inline"{/if}>
{if $smarty.now|date_format:'%Y-%m-%d' date_available}{l s='This product is available from '}{' '}{$product->date_available|date_format:'%d-%m-%Y'}{else}
{if $product->quantity == 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}
{/if}

Abra /themes/yourtheme/products-list.tpl e encontre a linha 20:

{if ($product.allow_oosp OR $product.quantity > 0) && $product.customizable != 2}

E substitua pelo seguinte código:

{if ($product.allow_oosp OR $product.quantity > 0) && $product.customizable != 2 && ($smarty.now|date_format:'%Y-%m-%d' >= $product.date_available)}

Screenshot Front Office
Screenshot Back Office

Download: Fórum PrestaShop

—————————————————————————————————-
Product available on a future date tweak

This prevent a product which is temporary not available to be sold.

In the backend you have the possibility to enter a date available.
In the frontend the buy now button will be disabled and a message will be displayed that the product is available from xx-xx-xxxx.

I have attached the files which are modified, if you already have a modified Prestashop i will describe which files to modify.

Files to be modify:

admin/tabs/adminproducts
classes/product.php
/themes/yourtheme/products.tpl
/themes/yourtheme/products-list.tpl

First you have to add an extra column to the product table
run this query in phpadmin or your favorite mysql query tool
(replace ps if you have a different database prefix!)

alter table ps_product add column date_available date

OPEN admin/tabs/adminproducts

Find aprox. Row 1253 ’.$this->l(‘Manufacturer:’).’


and add just before the following code

'.$this->l('Available from:').' getFieldValue($obj, 'date_available') AND $from != '0000-00-00' AND $from != '1942-01-01') ? $from : date('Y-m-d')).'" />

'.$this->l('Enter the date available for this product').'

OPEN classes/product.php

Find row 144:

/*** @var array Tags */
public $tags;

After this code add the following code:

/** @var date_available */
public $date_available = '1942-01-01';

Find row 168:
'reduction_to' => 'isDate',

After this code add the following code:

'date_available' => 'isdate',

Find row 239:

$fields['date_upd'] = pSQL($this->date_upd);

After this code add the following code:
$fields['date_available'] = pSQL($this->date_available);

OPEN /themes/yourtheme/products.tpl

Find row 82

var noTaxForThisProduct = {if $no_tax == 1}true{else}false{/if};

After this code add the following code:
var date_available = '{$product->date_available}';

Find row 203

quantity == 0 && !$product->available_later) || (!$product->available_now && $display_qties != 1) } style="display:none;"{/if}>
{l s='Availability:'}
quantity == 0} class="warning-inline"{/if}>
{if $product->quantity == 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}

And replace the code with the following code:

quantity == 0 && !$product->available_later) || (!$product->available_now && $display_qties != 1) } style="display:none;"{/if}>
{l s='Availability:'}
quantity == 0} class="warning-inline"{/if}>
{if $smarty.now|date_format:'%Y-%m-%d' date_available}{l s='This product is available from '}{' '}{$product->date_available|date_format:'%d-%m-%Y'}{else}
{if $product->quantity == 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}
{/if}

OPEN /themes/yourtheme/products-list.tpl

Find row 20
{if ($product.allow_oosp OR $product.quantity > 0) && $product.customizable != 2}

And replace it with the following code:

{if ($product.allow_oosp OR $product.quantity > 0) && $product.customizable != 2 && ($smarty.now|date_format:'%Y-%m-%d' >= $product.date_available)}

Screenshot Front Office
Screenshot Back Office

Download: Fórum PrestaShop

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s