DEV Community

loading...

[PRESTASHOP]Como adicionar campos personalizados ao produto.

gopanc profile image PANC ・2 min read

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;
Enter fullscreen mode Exit fullscreen mode

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'),
Enter fullscreen mode Exit fullscreen mode

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

pl.`field_exemplo`,
Enter fullscreen mode Exit fullscreen mode

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',
Enter fullscreen mode Exit fullscreen mode

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,
Enter fullscreen mode Exit fullscreen mode

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
))
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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`;
Enter fullscreen mode Exit fullscreen mode

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}
Enter fullscreen mode Exit fullscreen mode

Discussion

pic
Editor guide