[PRESTASHOP]Como adicionar campos personalizados ao produto.
Published: 2020-12-04 16:23:20

Como existem duvidas sobre como adicionar campos personalizados aos produtos e esta informação está em falta na documentação do Prestashop, decidi criar este tutorial.

Começamos por copiar o ficheiro classes/Product.php para override/classes. Ao criar um override deste ficheiro fazemos com que seja possível atualizar a versão do Prestashop no futuro sem que apague as nossas alterações.

Neste exemplo vou criar o campo “field_exemplo” que vai adicionar um campo à pagina de criação de produtos no BackOffice para depois mostrar esta informação na pagina do produto no FrontOffice

Por baixo de “class ProductCore extends ObjectModel” vamos adicionar o seguinte:
```
/** @var string Exemplo */
public $field_exemplo;
```

No mesmo ficheiro pesquisamos por “‘id_shop_default’ =>” e acrescentamos por cima dessa linha o seguinte:
```
'field_exemplo' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),
```

No mesmo ficheiro pesquisamos por ” pl.`description`” e acrescentamos depois da virgula o seguinte:
```
pl.`field_exemplo`,
```

Abrimos o ficheiro AdminModelAdapter.php localizado em src\PrestaShopBundle\Model\Product\AdminModelAdapter.php e dentro do ficheiro pesquisamos por ‘link_rewrite’, e por cima dessa linha adicionamos o seguinte código:
```
'field_exemplo',
```

No mesmo ficheiro pesquisamos por $this->product->name, e por cima dessa linha adicionamos a seguinte linha de codigo:
```
'field_exemplo' => $this->product->field_exemplo,
```

Agora abrimos o ficheiro ProductInformation.php que está em src\PrestaShopBundle\Form\Admin\Product\ProductInformation.php e pesquisamos por add(‘name’, TranslateType::class, array e por cima dessa linha adicionamos o seguinte código:
```
->add('field_exemplo', 'PrestaShopBundle\Form\Admin\Type\TranslateType', array(
            'options' => [
                'required' => false
            ],
            'locales' => $this->locales,
            'hideTabs' => true,
            'label' => $this->translator->trans('field_exemplo', [], 'Admin.Global'),
            'required' => false
))
```

Agora abrimos o ficheiro essentials.html.twig que está em src\PrestaShopBundle\Resources\views\Admin\Product\ProductPage\Panels\essentials.html.twig e pesquisamos por `{% if ‘PS_STOCK_MANAGEMENT’|configuration %}` e por cima dessa linha adicionamos o seguinte código:
```
<div class="form-group mb-4">
   <h2 style="padding-top:0px;">
      Field Exemplo
   </h2>
   <div class="row">
      <div class="col-xl-12 col-lg-12">
         {{ form_widget(form.step1.field_exemplo) }}
      </div>
   </div>
</div>
```

Criamos uma nova coluna na base de dados executando o seguinte código no separador “SQL”:
```
ALTER TABLE `product_lang` ADD `field_exemplo` TEXT NOT NULL AFTER `name`;
```

Agora só falta mostrar a informação que submetemos no Backoffice na pagina do produto do FrontOffice.

Dependendo do sitio onde queremos mostrar, os ficheiros variam, mas neste exemplo vamos adicionar por baixo do preço do produto alterando o ficheiro product-prices.tpl que fica em themes\classic\templates\catalog_partials\product-prices.tpl adicionando o seguinte código por cima de {block name=’product_unit_price’} adicionamos o seguinte codigo:
```
{if $product.field_exemplo}
   {$product.field_exemplo}
{/if}
```