[PrestaShop 1.7] Ajouter des champs texte aux produits

PrestaShop
  • Accueil
  • Blog
  • [PrestaShop 1.7] Ajouter des champs texte aux produits

Aujourd’hui, nouveau tuto PrestaShop pour ajouter un champ aux produits pour ensuite l’utiliser dans vos intégrations front office ou bien dans des développements admin.

 

Constat : besoins spécifiques pour certains e-commerçants

Nombreux sont les projets où mes clients me demandent d’ajouter des données pour leurs produits sans pouvoir utiliser les champs disponibles par défaut. Voici le type de cas où je préfère utiliser des champs personnalisés pour les produits :

Dans ces cas précis, ce tutoriel PrestaShop risque combler vos attentes.
Ah mais attends, ce tuto PrestaShop va aussi vous faire gagner de l’argent.
Mais ça on va le voir plus loin.
 

Tuto PrestaShop : ajouter un champ pour les produits

C’est parti pour résoudre le cas numéro 1. Le tuto PrestaShop se déroule en 5 étapes assez simples vous allez voir. Penchons-nous d’abord sur les 4 premières étapes :
 

1. Installer le module AmProductFields

[Edit du 06/02/2020] J’ai modifié le module pour que les 2 champs texte et zone de texte soient compatibles avec le multilingue. Pour info, il manquait la class translation-field sur les champs. C’est à présent corrigé 🙂 La version 1.1.2 du module est donc disponible au téléchargement pour ajouter un champ texte au produit sous PrestaShop 1.7 !
Téléchargez le module PrestaShop AmProductFields v1.1 ci-dessous (module modifié issu du bon travail de Hervé Hennes dans cet article) puis installez-le simplement via le back office de PrestaShop. Aucune configuration n’est nécessaire, facile donc !



 
prestashop-1.7-ajouter-champs-produits
 

2. Installer l’override Product.php

Pour vous simplifiez la tâche, j’ai compris dans le dossier du module le fichier override. Déplacez le fichier www/modules/amproductfields/doc_and_override/Product.php vers www/override/classes/ mais attention si vous avez déjà un fichier Product.php : dans ce cas, copiez le contenu du fichier que je fournis et adaptez-le avec le fichier Product.php déjà existant dans le dossier override/classes.
Supprimez le fichier de cache suivant : www/app/cache/prod/class_index.php
 

3. Rédigez vos contenus

Pour la base de départ, j’ai prévu 3 champs dont :

Rédigez vos contenus comme bon vous semble afin d’enrichir vos fiches produits.
 

4. Affichez vos contenus

Pour ma part, j’ai voulu afficher les informations saisies sur la fiche produit, sous les images, car par défaut le thème Classic offre de la place à cet endroit. On peut donc facilement rendre visible de l’information importante !
Ouvrez le fichier www/themes/classic/templates/catalog/product.tpl et ajoutez les lignes 74 à 77 :

{**
 * 2007-2017 PrestaShop
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License 3.0 (AFL-3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/AFL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to http://www.prestashop.com for more information.
 *
 * @author    PrestaShop SA <contact@prestashop.com>
 * @copyright 2007-2017 PrestaShop SA
 * @license   https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
 * International Registered Trademark & Property of PrestaShop SA
 *}
{extends file=$layout}

{block name='head_seo' prepend}
  <link rel="canonical" href="{$product.canonical_url}">
{/block}

{block name='head' append}
  <meta property="og:type" content="product">
  <meta property="og:url" content="{$urls.current_url}">
  <meta property="og:title" content="{$page.meta.title}">
  <meta property="og:site_name" content="{$shop.name}">
  <meta property="og:description" content="{$page.meta.description}">
  <meta property="og:image" content="{$product.cover.large.url}">
  <meta property="product:pretax_price:amount" content="{$product.price_tax_exc}">
  <meta property="product:pretax_price:currency" content="{$currency.iso_code}">
  <meta property="product:price:amount" content="{$product.price_amount}">
  <meta property="product:price:currency" content="{$currency.iso_code}">
  {if isset($product.weight) && ($product.weight != 0)}
  <meta property="product:weight:value" content="{$product.weight}">
  <meta property="product:weight:units" content="{$product.weight_unit}">
  {/if}
{/block}

{block name='content'}

  <section id="main" itemscope itemtype="https://schema.org/Product">
    <meta itemprop="url" content="{$product.url}">

    <div class="row">
      <div class="col-md-6">
        {block name='page_content_container'}
          <section class="page-content" id="content">
            {block name='page_content'}
              {block name='product_flags'}
                <ul class="product-flags">
                  {foreach from=$product.flags item=flag}
                    <li class="product-flag {$flag.type}">{$flag.label}</li>
                  {/foreach}
                </ul>
              {/block}

              {block name='product_cover_thumbnails'}
                {include file='catalog/_partials/product-cover-thumbnails.tpl'}
              {/block}
              <div class="scroll-box-arrows">
                <i class="material-icons left"></i>
                <i class="material-icons right"></i>
              </div>

              <section id="amproductfields">
                <h2>{$product.custom_field_lang}</h2>
                <div>{$product.custom_field_lang_wysiwyg nofilter}</div>
              </section>

            {/block}
          </section>
        {/block}
        </div>
        <div class="col-md-6">
          {block name='page_header_container'}
            {block name='page_header'}
              <h1 class="h1" itemprop="name">{block name='page_title'}{$product.name}{/block}</h1>
            {/block}
          {/block}
          {block name='product_prices'}
            {include file='catalog/_partials/product-prices.tpl'}
          {/block}

          <div class="product-information">
            {block name='product_description_short'}
              <div id="product-description-short-{$product.id}" itemprop="description">{$product.description_short nofilter}</div>
            {/block}

            {if $product.is_customizable && count($product.customizations.fields)}
              {block name='product_customization'}
                {include file="catalog/_partials/product-customization.tpl" customizations=$product.customizations}
              {/block}
            {/if}

            <div class="product-actions">
              {block name='product_buy'}
                <form action="{$urls.pages.cart}" method="post" id="add-to-cart-or-refresh">
                  <input type="hidden" name="token" value="{$static_token}">
                  <input type="hidden" name="id_product" value="{$product.id}" id="product_page_product_id">
                  <input type="hidden" name="id_customization" value="{$product.id_customization}" id="product_customization_id">

                  {block name='product_variants'}
                    {include file='catalog/_partials/product-variants.tpl'}
    %2<br />
0             {/block}

                  {block name='product_pack'}
                    {if $packItems}
                      <section class="product-pack">
                        <h3 class="h4">{l s='This pack contains' d='Shop.Theme.Catalog'}</h3>
                        {foreach from=$packItems item="product_pack"}
                          {block name='product_miniature'}
                            {include file='catalog/_partials/miniatures/pack-product.tpl' product=$product_pack}
                          {/block}
                        {/foreach}
                    </section>
                    {/if}
                  {/block}

                  {block name='product_discounts'}
                    {include file='catalog/_partials/product-discounts.tpl'}
                  {/block}

                  {block name='product_add_to_cart'}
                    {include file='catalog/_partials/product-add-to-cart.tpl'}
                  {/block}

                  {block name='product_additional_info'}
                    {include file='catalog/_partials/product-additional-info.tpl'}
                  {/block}

                  {block name='product_refresh'}
                    <input class="product-refresh ps-hidden-by-js" name="refresh" type="submit" value="{l s='Refresh' d='Shop.Theme.Actions'}">
                  {/block}
                </form>
              {/block}

            </div>

            {block name='hook_display_reassurance'}
              {hook h='displayReassurance'}
            {/block}
        </div>
      </div>
    </div>

    <div id="product_tabs" class="row">
      <div class="col-xs-12">
        {block name='product_tabs'}
              <div class="tabs">
                <ul class="nav nav-tabs" role="tablist">
                  {if $product.description}
                    <li class="nav-item">
                       <a
                         class="nav-link{if $product.description} active{/if}"
                         data-toggle="tab"
                         href="#description"
                         role="tab"
                         aria-controls="description"
                         {if $product.description} aria-selected="true"{/if}>{l s='Description' d='Shop.Theme.Catalog'}</a>
                    </li>
                  {/if}
                  <li class="nav-item">
                    <a
                      class="nav-link{if !$product.description} active{/if}"
                      data-toggle="tab"
                      href="#product-details"
                      role="tab"
                      aria-controls="product-details"
                      {if !$product.description} aria-selected="true"{/if}>{l s='Product Details' d='Shop.Theme.Catalog'}</a>
                  </li>
                  {if $product.attachments}
                    <li class="nav-item">
                      <a
                        class="nav-link"
                        data-toggle="tab"
                        href="#attachments"
                        role="tab"
                        aria-controls="attachments">{l s='Attachments' d='Shop.Theme.Catalog'}</a>
                    </li>
                  {/if}
                  {foreach from=$product.extraContent item=extra key=extraKey}
                    <li class="nav-item">
                      <a
                        class="nav-link"
                        data-toggle="tab"
                        href="#extra-{$extraKey}"
                        role="tab"
                        aria-controls="extra-{$extraKey}">{$extra.title}</a>
                    </li>
                  {/foreach}
                </ul>

                <div class="tab-content" id="tab-content">
                 <div class="tab-pane fade in{if $product.description} active{/if}" id="description" role="tabpanel">
                   {block name='product_description<br />
'}
                     <div class="product-description">{$product.description nofilter}</div>
                   {/block}
                 </div>

                 {block name='product_details'}
                   {include file='catalog/_partials/product-details.tpl'}
                 {/block}

                 {block name='product_attachments'}
                   {if $product.attachments}
                    <div class="tab-pane fade in" id="attachments" role="tabpanel">
                       <section class="product-attachments">
                         <h3 class="h5 text-uppercase">{l s='Download' d='Shop.Theme.Actions'}</h3>
                         {foreach from=$product.attachments item=attachment}
                           <div class="attachment">
                             <h4><a href="{url entity='attachment' params=['id_attachment' => $attachment.id_attachment]}">{$attachment.name}</a></h4>
                             <p>{$attachment.description}</p
                             <a href="{url entity='attachment' params=['id_attachment' => $attachment.id_attachment]}">
                               {l s='Download' d='Shop.Theme.Actions'} ({$attachment.file_size_formatted})
                             </a>
                           </div>
                         {/foreach}
                       </section>
                     </div>
                   {/if}
                 {/block}

                 {foreach from=$product.extraContent item=extra key=extraKey}
                 <div class="tab-pane fade in {$extra.attr.class}" id="extra-{$extraKey}" role="tabpanel" {foreach $extra.attr as $key => $val} {$key}="{$val}"{/foreach}>
                   {$extra.content nofilter}
                 </div>
                 {/foreach}
              </div>  
            </div>
          {/block}
      </div>
    </div>

    {block name='product_accessories'}
      {if $accessories}
        <section class="product-accessories clearfix">
          <h3 class="h5 text-uppercase">{l s='You might also like' d='Shop.Theme.Catalog'}</h3>
          <div class="products">
            {foreach from=$accessories item="product_accessory"}
              {block name='product_miniature'}
                {include file='catalog/_partials/miniatures/product.tpl' product=$product_accessory}
              {/block}
            {/foreach}
          </div>
        </section>
      {/if}
    {/block}

    {block name='product_footer'}
      {hook h='displayFooterProduct' product=$product category=$category}
    {/block}

    {block name='product_images_modal'}
      {include file='catalog/_partials/product-images-modal.tpl'}
    {/block}

    {block name='page_footer_container'}
      <footer class="page-footer">
        {block name='page_footer'}
          <!-- Footer content -->
        {/block}
      </footer>
    {/block}
  </section>

{/block}

On affiche alors les 2 champs traduisibles dans une <section> avec un id dans le cas où vous auriez besoin de donner un style particulier à l’élément. J’ai aussi encadré d’un <h2> le premier champ pour avoir un code optimisé pour le référencement.
 

Comment afficher les champs sur la page panier ?

[Edit du 21/07/2018] J’ai reçu plusieurs commentaires à ce sujet c’est pourquoi j’ai décidé de mettre à jour cet article. Je vais vous expliquer comment afficher les nouveaux champs de la fiche produit sur la page panier. Vous allez voir que c’est assez simple finalement !
J’ouvre d’abord le fichier www/classes/Cart.php et je copie la fonction getProducts dans un override que je place à cet endroit : www/override/classes/Cart.php.
Il faut ajouter les deux nouveaux champs dans la requête SQL SELECT ce qui donne ceci si on affiche la fonction simplement :

/**
 * Return cart products
 *
 * @param bool $refresh
 * @param bool $id_product
 * @param int  $id_country
 * @param bool $fullInfos
 *
 * @return array Products
 */
public function getProducts($refresh = false, $id_product = false, $id_country = null, $fullInfos = true)
{
    if (!$this->id) {
        return array();
    }
    // Product cache must be strictly compared to NULL, or else an empty cart will add dozens of queries
    if ($this->_products !== null && !$refresh) {
        // Return product row with specified ID if it exists
        if (is_int($id_product)) {
            foreach ($this->_products as $product) {
                if ($product['id_product'] == $id_product) {
                    return array($product);
                }
            }
            return array();
        }
        return $this->_products;
    }

    // Build query
    $sql = new DbQuery();

    // Build SELECT
    $sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, cp.`id_customization`, pl.`name`, p.`is_virtual`,
                    pl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`,
                    p.`id_manufacturer`, m.`name` AS manufacturer_name, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`,
                    product_shop.`available_for_order`, product_shop.`show_price`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
                    stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
                    p.`available_date`, p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category, pl.`custom_field_lang_wysiwyg`, pl.`custom_field_lang`,
                    CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0), IFNULL(cp.`id_customization`, 0)) AS unique_id, cp.id_address_delivery,
                    product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');

    // Build FROM
    $sql->from('cart_product', 'cp');

    // Build JOIN
    $sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`');
    $sql->innerJoin('product_shop', 'product_shop', '(product_shop.`id_shop` = cp.`id_shop` AND product_shop.`id_product` = p.`id_product`)');
    $sql->leftJoin(
        'product_lang',
        'pl',
        'p.`id_product` = pl.`id_product`
        AND pl.`id_lang` = '.(int)$this->id_lang.Shop::addSqlRestrictionOnLang('pl', 'cp.id_shop')
    );

    $sql->leftJoin(
        'category_lang',
        'cl',
        'product_shop.`id_category_default` = cl.`id_category`
        AND cl.`id_lang` = '.(int)$this->id_lang.Shop::addSqlRestrictionOnLang('cl', 'cp.id_shop')
    );

    $sql->leftJoin('product_supplier', 'ps', 'ps.`id_product` = cp.`id_product` AND ps.`id_product_attribute` = cp.`id_product_attribute` AND ps.`id_supplier` = p.`id_supplier`');
    $sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');

    // @todo test if everything is ok, then refactorise call of this method
    $sql->join(Product::sqlStock('cp', 'cp'));

    // Build WHERE clauses
    $sql->where('cp.`id_cart` = '.(int)$this->id);
    if ($id_product) {
        $sql->where('cp.`id_product` = '.(int)$id_product);
    }
    $sql->where('p.`id_product` IS NOT NULL');

    // Build ORDER BY
    $sql->orderBy('cp.`date_add`, cp.`id_product`, cp.`id_product_attribute` ASC');

    if (Customization::isFeatureActive()) {
        $sql->select('cu.`id_customization`, cu.`quantity` AS customization_quantity');
        $sql->leftJoin(
            'customization',
            'cu',
            'p.`id_product` = cu.`id_product` AND cp.`id_product_attribute` = cu.`id_product_attribute` AND cp.`id_customization` = cu.`id_customization` AND cu.`id_cart` = '.(int)$this->id
        );
        $sql->groupBy('cp.`id_product_attribute`, cp.`id_product`, cp.`id_shop`, cp.`id_customization`');
    } else {
        $sql->select('NULL AS customization_quantity, NULL AS id_customization');
    }

    if (Combination::isFeatureActive()) {
        $sql->select('
            product_attribute_shop.`price` AS price_attribute, product_attribute_shop.`ecotax` AS ecotax_attr,
            IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference,
            (p.`weight`+ pa.`weight`) weight_attribute,
            IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13,
            IF (IFNULL(pa.`isbn`, \'\') = \'\', p.`isbn`, pa.`isbn`) AS isbn,
            IF (IFNULL(pa.`upc`, \'\') = \'\', p.`upc`, pa.`upc`) AS upc,
            IFNULL(product_attribute_shop.`minimal_quantity`, product_shop.`minimal_quantity`) as minimal_quantity,
            IF(product_attribute_shop.wholesale_price > 0,  product_attribute_shop.wholesale_price, prod<br />
uct_shop.`wholesale_price`) wholesale_price
        ');

        $sql->leftJoin('product_attribute', 'pa', 'pa.`id_product_attribute` = cp.`id_product_attribute`');
        $sql->leftJoin('product_attribute_shop', 'product_attribute_shop', '(product_attribute_shop.`id_shop` = cp.`id_shop` AND product_attribute_shop.`id_product_attribute` = pa.`id_product_attribute`)');
    } else {
        $sql->select(
            'p.`reference` AS reference, p.`ean13`, p.`isbn`,
            p.`upc` AS upc, product_shop.`minimal_quantity` AS minimal_quantity, product_shop.`wholesale_price` wholesale_price'
        );
    }

    $sql->select('image_shop.`id_image` id_image, il.`legend`');
    $sql->leftJoin('image_shop', 'image_shop', 'image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$this->id_shop);
    $sql->leftJoin('image_lang', 'il', 'il.`id_image` = image_shop.`id_image` AND il.`id_lang` = '.(int)$this->id_lang);

    $result = Db::getInstance()->executeS($sql);

    // Reset the cache before the following return, or else an empty cart will add dozens of queries
    $products_ids = array();
    $pa_ids = array();
    if ($result) {
        foreach ($result as $key => $row) {
            $products_ids[] = $row['id_product'];
            $pa_ids[] = $row['id_product_attribute'];
            $specific_price = SpecificPrice::getSpecificPrice($row['id_product'], $this->id_shop, $this->id_currency, $id_country, $this->id_shop_group, $row['cart_quantity'], $row['id_product_attribute'], $this->id_customer, $this->id);
            if ($specific_price) {
                $reduction_type_row = array('reduction_type' => $specific_price['reduction_type']);
            } else {
                $reduction_type_row = array('reduction_type' => 0);
            }

            $result[$key] = array_merge($row, $reduction_type_row);
        }
    }
    // Thus you can avoid one query per product, because there will be only one query for all the products of the cart
    Product::cacheProductsFeatures($products_ids);
    Cart::cacheSomeAttributesLists($pa_ids, $this->id_lang);

    $this->_products = array();
    if (empty($result)) {
        return array();
    }

    if ($fullInfos) {
        $ecotax_rate = (float)Tax::getProductEcotaxRate($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
        $apply_eco_tax = Product::$_taxCalculationMethod == PS_TAX_INC && (int)Configuration::get('PS_TAX');
        $cart_shop_context = Context::getContext()->cloneContext();

        $gifts = $this->getCartRules(CartRule::FILTER_ACTION_GIFT);
        $givenAwayProductsIds = array();

        if ($this->shouldSplitGiftProductsQuantity && count($gifts) > 0) {
            foreach ($gifts as $gift) {
                foreach ($result as $rowIndex => $row) {
                    if (!array_key_exists('is_gift', $result[$rowIndex])) {
                        $result[$rowIndex]['is_gift'] = false;
                    }

                    if (
                        $row['id_product'] == $gift['gift_product'] &&
                        $row['id_product_attribute'] == $gift['gift_product_attribute']
                    ) {
                        $row['is_gift'] = true;
                        $result[$rowIndex] = $row;
                    }
                }

                $index = $gift['gift_product'] . '-' . $gift['gift_product_attribute'];
                if (!array_key_exists($index, $givenAwayProductsIds)) {
                    $givenAwayProductsIds[$index] = 1;
                } else {
                    $givenAwayProductsIds[$index]++;
                }
            }
        }

        foreach ($result as &$row) {
            if (!array_key_exists('is_gift', $row)) {
                $row['is_gift'] = false;
            }

            $additionalRow = Product::getProductProperties((int)$this->id_lang, $row);
            $row['reduction'] = $additionalRow['reduction'];
            $row['price_without_reduction'] = $additionalRow['price_without_reduction'];
            $row['specific_prices'] = $additionalRow['specific_prices'];
            unset($additionalRow);

            $givenAwayQuantity = 0;
            $giftIndex = $row['id_product'] . '-' . $row['id_product_attribute'];
            if ($row['is_gift'] && array_key_exists($giftIndex, $givenAwayProductsIds)) {
                $givenAwayQuantity = $givenAwayProductsIds[$giftIndex];
            }

            if (!$row['is_gift'] || (int)$row['cart_quantity'] === $givenAwayQuantity) {
                $row = $this->applyProductCalculations($row, $cart_shop_context);
            } else {
                // Separate products given away from those manually added to cart
  %2<br />
0             $this->_products[] = $this->applyProductCalculations($row, $cart_shop_context, $givenAwayQuantity);
                unset($row['is_gift']);
                $row = $this->applyProductCalculations(
                    $row,
                    $cart_shop_context,
                    $row['cart_quantity'] - $givenAwayQuantity
                );
            }

            $this->_products[] = $row;
        }
    } else {
        $this->_products = $result;
    }

    return $this->_products;
}

Notez l’ajout de pl.custom_field_lang_wysiwyg, pl.custom_field_lang, dans la requête SQL.
Une fois que c’est modifié, supprimez le fichier de cache suivant : www/app/cache/prod/class_index.php
Enfin, vous pouvez afficher les nouveaux champs dans le fichier www/prestashop/themes/mon_theme/templates/checkout/_partials/cart-detailed-product-line.tpl.tpl en utilisant :
<section id="amproductfields">
<h2>{$product.custom_field_lang}</h2>
<div>{$product.custom_field_lang_wysiwyg nofilter}</div>
</section>

 

Comment gagner de l’argent avec ce tuto PrestaShop ?

La réponse est assez simple vous allez voir.
Aujourd’hui, vous savez à présent comment afficher de nouveaux champs sur vos fiches produits. Très bien, et alors ??
Et bien, vous allez donc pouvoir proposer une fiche produit avec les infos clés en haut de page et un bouton d’ajout panier visible même sur les écrans de taille moyenne.
prestashop-1.7-ajouter-champs-produits-1
Enfin, vous allez pouvoir travailler votre référencement en ajoutant du contenu à vos fiches produits.
Je peux conseiller le format suivant :

  • description courte : avis du marchand avec un ton vendeur
  • champs supplémentaires : points clés du produit avec des faits
  • description longue : détails du produits avec des phrases et des informations pointues, le tout organisé avec des titres et visuels

Le résultat :

  • une fiche produit optimisée pour la lecture par vos clients, un meilleur taux de conversion à la clé
  • une visibilité de vos pages produits améliorée par un contenu plus riche et optimisé pour le SEO : meilleur référencement donc !

Vous avez un bel outil aujourd’hui pour développer votre business alors faites en bon usage 😉
 
A bientôt pour un nouvel article !

106 commentaires sur “[PrestaShop 1.7] Ajouter des champs texte aux produits

  1. Bonjour,
    Avant tout pour votre travail, il correspond exactement a ce que je souhaite faire !
    J’ai néanmoins un soucis, aprés l’installation et la suppression du fichier cache, l’inteface admin du produit n’est pas modifiée. J’ai bien votre module dans l’onglet modules sur la fiche produit mais aucun champs.
    Auriez vous une idée ?
    https://i.imgur.com/unDJImh.png
    Cordialement,

    1. Bonjour Yoann,
      Avec plaisir 🙂 Avez-vous bien supprimé le fichier de cache suivant : www/app/cache/prod/class_index.php ?
      Bonne journée.

  2. Merci pour votre réponse, j’ai bien supprimer le class_index.php ( cf imprime écran ci dessus ), j’ai essayer de tout supprimer ou de recrée le cache.
    J’ai essayer de réinstaller plusieurs fois le module, pourtant il semble actif.
    Il y a une subtilité que je n’ai pas compris, pourtant la précédure est trés bien écrite !

    1. Bonjour Yoann,
      Dans l’admin de PrestaShop > Paramètres avancés > Performances, il faut que l’option « Désactiver toutes les surcharges » soit sur « non » aussi.
      Quelle est la version de PS ?

  3. Bonjour,
    J’utilise la version 1.7.1.2, je peux la mettre à jours si besoin.
    La case désactiver toutes les surcharges est bien sur non
    https://i.imgur.com/MUySgt2.png
    En regardant votre premier imprime écran, vous n’avez pas la partie  » ajouter une caractéristique, marque ou produit » sous le résumé. J’ai peut etre un conflit de module.

    1. Bonjour Yoann,
      Je viens de tester sur une 1.7.1.2 et je n’ai aucun problème.
      Si vous le souhaitez, je peux regarder : contactez-moi par e-mail 😉

    2. Bonjour Yoann,
      J’ai fais quelques recherches et le module enregistrait bien les informations dans la base de données mais il ne les affichait pas dans le back office une fois sauvegardées.
      C’est corrigé et le lien de téléchargement est à jour dans l’article.
      J’ai testé sur PrestaShop 1.7.3.0 et c’est fonctionnel.
      Bon téléchargement et pensez à laisser un avis sur le sujet 😉
      A très vite

  4. Bonjour, merci pour tout ce boulot et de le partager. J’ai le même souci que YOANN, si tu as trouvé la solution pour lui peux tu m’aider à mon tour. Merci beaucoup.

    1. Bonjour eric,
      Je viens de modifier l’article avec le lien du module corrigé. J’ai répondu à Yoann avec le problème qui se produisait également.
      Bon téléchargement 🙂
      A très vite

  5. Bonjour,
    Merci pour d’avoir partagé, c’est super.
    J’ai le même problème que yoann, si la solution a été trouver je suis preneur.
    Merci d’avance

  6. Hello, nice tutorial, it works!
    How can the custom field be added to faceted search filter block?
    thanks

    1. Hi,
      Hum it’s possible but it’s an another deep work 😉
      You can send me an email to work on it.
      Regards

  7. Bonsoir,
    J’ai installé votre module et j’ai fait exactement ce que vous avez décrit. Tout fonctionne parfaitement.
    Je vois les trois champs que vous avez créé. J’ai essayé de modifier le fichier product.php ainsi que le fichier .tpl afin de mettre à la place de vos champs un simple champ texte que j’ai nommé « modele ».
    Il ne se passe rien. J’ai supprime le fichier de cache mais ça ne change rien. Seuls vos trois champs s’affichent. De plus, j’ai essayé d’entrer des données dans ces champs et de les enregistrer et lorsque je reviens sur la fichie produit, ces champs sont vide. Qu’est-ce que je n’ai pas compris dans votre explication? Comment modifier les fichiers afin de changer les champs que vous avez mis par défaut en y mettant ceux que je désire? Merci.

    1. Bonjour Antoine,
      J’ai modifié l’article avec le lien de téléchargement du module PrestaShop corrigé. J’ai répondu à Yoann avec le souci en question
      Bon téléchargement et n’hésitez pas à faire un retour si c’est bon 😉
      A très vite

  8. Hello!
    Thanks for this tutorial. I followed your steps and got my field on the right place … but: the values are not saved to the database? On refresh the values are gone .. do you have any idea?
    kind regards,

    1. Hi Andre,
      I have notice to Yoann (first comment) that the post and the download link is modified and working right now.
      You can download it now and tell me here if all is okay 😉
      Regards

  9. Merci beaucoup pour les instructions très pratiques ! J’ai essayé de transférer la méthode aux ps-marques.. Malheureusement, il ne fonctionne pas et la documentation de PrestaShop ne contient aucune aide. Est-ce que quelqu’un a déjà réussi à ajouter son propre champ de marque à PrestaShop 1.7 ?
    Pardonnez mon français insuffisant !

    1. Bonjour Gabriel,
      Merci pour le commentaire,
      Non je n’ai pas encore pris le temps de faire un tuto sur ce sujet mais je le note 🙂
      A bientôt !

  10. Bonjour,
    Merci pour ce module il fonctionne très bien 🙂
    Cependant, je ne peux pas traduire les champs, les valeurs dans les champs restent les mêmes pour toutes les langues, y a-t-il une procédure pour activer cette fonctionnalité ?
    Merci d’avance pour votre aide 🙂

    1. Bonjour,
      Merci pour votre commentaire.
      Par défaut, un seul champ est traduisible dans ce module, vous pouvez donc l’utiliser en multilingue sans problème.
      Vous pouvez aussi dupliquer ce champ et son fonctionnement dans le module si besoin 🙂

  11. merci pour le précieux module fonctionne parfaitement sur certaines parties mais j’ai besoin d’aide car je ne sais pas comment faire et je ne suis pas un programmeur.
    J’ai utilisé le champ supplémentaire pour remplacer le nom du produit, le nom n’apparaît pas ici:
    – lors de l’achat du produit ajouté au panier
    – barre de recherche, recherche par nom de produit et non par champ personnalisé
    – section ci-dessous le produit: « vous pourriez l’aimer aussi » (je pense que c’est crosselling)
    J’ai de sérieux ennuis, pourriez-vous m’aider rapidement? Je suis sur le point de publier et je suis toujours.
    Merci beaucoup d’avance!
    ver prestashop 1.7.2.4

    1. Bonjour Gianluca,
      Merci pour le commentaire,
      En fait il faut suivre le tuto car le module permet d’enregistrer en base de données les informations supplémentaires du produit.
      Il faut ensuite les afficher et pour cela, il faut placer les variables, c’est l’étape 4 du tuto 😉

    1. Bonjour,
      Vous avez l’info dans le fichier php du module dans la fonction install tout simplement avec la liste des hooks.
      A bientôt 🙂

  12. Bonjour, Je me permets ce message parce que j’ai besoin, pour diverses raisons, non pas de créer les produits par le back office de prestashop mais par les tables mysql. Je travaille sous prestashop 1,7,4,0. J’ai ajouté une table mysql à la base de données prestashop. Certains éléments de cette table vont aller « alimenter » les tables existantes de prestashop, de façon à créer dans le bak office d’une part et aussi dans le front office le produit. Pour arriver à un résultat concluant, j’ai donc à partir du back office créer deux produits. J’ai édité les tables PRODUCT, PRODUCT LANG, PRODUCT SHOP, STOCK AVAILABLE et STOCK MVT, qui à mon sens sont les tables qui permettent le travail sur la création d’un produit. J’ai regardé comment s’articulait les ajouts des produits dans les tables en passant par le back office. J’ai aussi avant tout créer les catégories nécessaires. En alimentant ces tables décrites plus haut, par mysql admin dans l’onglet « INSERER » le produit apparaît bien dans la partie back office avec tous les autres produits, mais n’est pas dans le front office. Pourquoi ?
    Merci d’une réponse

    1. Bonjour Edmond,
      Merci pour votre commentaire,
      Si le produit apparait bien dans l’admin, je pense qu’il doit tout simplement y avoir une valeur à 0 sur le champ « active » ou différent de both pour le champ « visibility ».
      C’est de ce côté là qu’il faut regarder à mon avis.
      Bonnes recherches et pensez à partager votre solution pour les autres 😉

  13. Suite à ma demande de ce jour 17 juillet a 10h58, j’ai réussi à trouver ce qu’il fallait faire. Il faut que dans la table CATEGORY PRODUCT, une ligne correspondant au nouveau produit créé figure. Exemple le nouvel id product est 5, il faut une nouvelle ligne comprenant l’ID de la category choisie, l’ID product qui sera donc 5 et la position qui sera implémentée de 1 par rapport au produit qui précedait.
    Après les autres tables PRODUCT, PRODUCT LANG, PRODUCT SHOP, STOCK AVAILABLE et STOCK MVT, si elles sont correctement remplies, le nouveau produit apparait aux yeux de tous dans le front office.
    Cordialement
    Edmond

  14. Bonjour Arnaud,
    Ca marche parfaitement en front sur fiche produit, quick-view, miniature etc…! un grand merci Arnaud pour ce tuto.
    J’aurais souhaité également ajouter le nouveau champs sur le récapitulatif du panier, mais en appliquant l’étape 4 du tuto dans cart.tpl, j’ai un message d’erreur :
    ContextErrorException in smarty_internal_templatebase.php(157) : eval()’d code line 696:
    Notice: Undefined index: custom_field
    in smarty_internal_templatebase.php(157) : eval()’d code line 696
    at ErrorHandler->handleError(‘8’, ‘Undefined index: custom_field’, ‘/home/directtrp/www/2017/vendor/prestashop/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()’d code’, ‘696’, array(‘_smarty_tpl’ => object(Smarty_Dev_Template))) in smarty_internal_templatebase.php(157) : eval()’d code line 696
    at content_5b51d82ce143e4_24560705(object(Smarty_Dev_Template)) in smarty_internal_templatebase.php(157) : eval()’d code line 659
    at content_5b51d82ce0aef4_36988028(object(Smarty_Dev_Template)) in smarty_internal_templatebase.php(157) : eval()’d code line 209
    at content_5b51d82ced5474_71490027(object(Smarty_Dev_Template)) in smarty_internal_templatebase.php line 188
    at Smarty_Internal_TemplateBase->fetch(‘checkout/cart.tpl’, null, ‘layouts/layout-full-width.tpl’, object(SmartyDev), false, true, false) in SmartyDev.php line 41
    at SmartyDev->fetch(‘checkout/cart.tpl’, null, ‘layouts/layout-full-width.tpl’) in FrontController.php line 660
    at FrontControllerCore->smartyOutputContent(‘checkout/cart.tpl’) in FrontController.php line 644
    at FrontControllerCore->display() in Controller.php line 225
    at ControllerCore->run() in Dispatcher.php line 369
    at DispatcherCore->dispatch() in index.php line 28
    cart.tpl est il gérer différemment que product.tpl?
    Merci pour tes lumières!
    David

    1. Bonjour David,
      Merci pour le commentaire,
      Je viens de mettre à jour l’article avec une section dédiée à l’affichage des champs sur la page panier.
      J’espère que ça vous aidera 😉

    1. Bonjour illucom,
      Merci pour le commentaire,
      Comme c’est indiqué par David, il faut reprendre les variable smarty de la fiche produit et les insérer dans le .tpl souhaité.
      Dans certains cas comme pour la page panier, il faut aussi modifier le controller pour que la requête sur les produits prenne en compte les nouveaux champs 😉

  15. Bonjour,
    Merci pour ce module.
    Après la mise à jour du fichier j’ai encore le même problème que YOAN. Les champs ne s’affichent pas dans le back office après installation..
    Merci.

    1. Bonjour Bou,
      Merci pour votre message.
      Il faut bien utiliser la dernière version du module via le lien dans l’article.
      Aussi, quelle est votre version de PrestaShop ?

    2. Merci de votre réponse.
      La version que j’utilise est la version 1.7.1.2
      Le problème vient peut-être de là…
      Merci

    3. Bonjour,
      Je reviens un peu tardivement avec le même problème. Je n’arrive pas à faire apparaître les champs dans le back office sur un serveur distant (tout marche en local). La version prestashop que j’utilise est la version 1.7.1.2.
      Avez-vous des idées sur ce problème ?
      Cordialement,
      Matthias

      1. Bonjour,
        Vérifiez déjà que le module est bien installé, activé et qu’il est présent sur les hooks dans la section positions dans l’admin.
        Si non, réinstallez-le en ligne.
        A bientôt 🙂

  16. C’est pour des champs simples, une idée de comment faire pour ajouter un select multiple ?
    Doc inexistante pour la 1.7 ……

    1. Bonjour, non malheureusement lorsqu’on a plusieurs langue d’activées et qu’on a installé le module, effectivement il y a les trois nouveaux champs qui s’affichent sur les fiches produit dans le BO, mais ils ne deviennent pas traduisible. Lorsqu’on change la langue de la fiche produit on a tout les champs natif prestashop de la fiche produit qui changent mais pas les deux derniers champs du module AMProductfield. Vu sur presta 1.7.4.2 et 1.7.4.3
      Ce serait bie nd’en faire un module traditionnel qu’on installe par glisser/déposer dans le BO et qui fonctionne en plusieurs langue.
      Merci pour ce module en tous cas car il n y a pas de module alternatif pour mettre du texte référençable dans la première colonne des fiches produit (sous les photos).

      1. Bonjour Abc,
        Merci pour votre retour.
        Je prends note de votre demande pour voir à développer ce type de module.
        A bientôt !

  17. Bonjour Arnaud,
    Merci pour ce module.
    Cependant, aprés avoir suivi à la lettre le tuto j’ai le même problème que YOAN.
    Les champs ne s’affichent pas dans le back office après installation.
    Quelle solution SVP / Merci
    Cache supprimé
    version Prestashop 1.7.1.2
    Merci de votre aide.
    Bonne journée
    Sophie

    1. Bonjour,
      Je viens de tester sur PS 1.7.2.0 et il peut y avoir un blocage et dans ce cas, il faut désinstaller le module si possible puis supprimer le dossier module et amproductfields.zip dans le dossier modules.
      Une fois que c’est bon, il faut uploader manuellement le dossier amproductfields dans /modules/ et installer via le back office le module.

  18. Bonsoir Arnaud Merigeau.
     »
    Bonjour,
    Je viens de tester sur PS 1.7.2.0 et il peut y avoir un blocage et dans ce cas, il faut désinstaller le module si possible puis supprimer le dossier module et amproductfields.zip dans le dossier modules.
    Une fois que c’est bon, il faut uploader manuellement le dossier amproductfields dans /modules/ et installer via le back office le module.
     »
    La méthode fonctionne avec Presta 1.7.4.3

  19. Bonjour, Tout mes produits ont besoin d’être expliqué avec des détails techniques et autre, et je ne trouve aucun module qui permette d’écrire un paragraphe personnalisé pour chaque produit sur leurs fiches sous les photos. J’ai regarder du coté de mypresta.eu le module « Prestashop HTML Box Pro » ça sert a accrocher des blocs texte n’importe ou sur le site, mais c’est des bloc texte unique qui apparaissent sur toutes les pages qui ont le « hook » ou l’on a accroché le bloc texte. Je n’ai essayé que la version gratuite « Prestashop HTML box » mais avec tout ce que j’ai essayer je suis pas arrivé a créé de champ personnalisé pour mes produits comme le permet votre module « AmProductsField ».
    Vu que vous l’avez devellopé pour PS 1.7, mais sur ma version 1.7.4.2 le multilingue ne fonctionne pas, c’est vraiment domage.
    Est ce que vous pourriez mettre a jour le module pour qu’il fonctionne en multilingue svp ? Je dois démarrer ma boutique sans plus tarder, j’en ai vraiment besoin.
    Énorme merci si vous pouvez solutionner ce problème.

    1. Bonjour,
      Merci pour le commentaire.
      Le module n’est pas encore à jour faute de temps.
      Je posterai un update sur cet article lorsque se sera le cas.
      A bientôt 🙂

  20. bonjour et merci pour votre module
    j’ai suivis toutes les instructions mais après sauvegarde je rentre dans la fiche produit et le champs wizwig est vide ?
    d’autre part j’aimerai en fait pouvoir renter un code html dans le champs wizwig est il possible de le faire
    Merci d’avance pour votre aide

  21. Bonjour et bonne année 2019
    j’ai le même problème que mes collègues sur 1.7.1.2 sauf que les correctifs proposés ne fonctionnent pas. Une fois installé le module fait bien les ALTER TABLE mais les champs n’apparaissent pas dans la page admin produit.
    Cela semble venir du hook car le hookDisplayAdminProductsMainStepLeftColumnMiddle n’est pas déclenché dans la page produits. Preuve en est que lorsque je glisse une erreur dans le code de amproductfiels.php la page produit n’est pas du tout affectée.
    Tandis que la page Admin Positions affiche bien mon erreur.

  22. Bonsoir, est ce que cette modification est compatible avec prestashop 1.6.1.17 ?
    Merci d’avance de votre réponse… Je tourne en rond…
    Cordialement

  23. Bravo et merci pour ce tuto.
    Fonctionne parfaitement sur la version 1.7.5.0.
    Pour ma part, j’ai placé ce nouveau champ sur le côté droit, sous le le bouton « Ajouter au panier ».
    Cordialement,
    Roger.

  24. Bonjour, je viens d’installer le module et j’ai le problème cité plus haut, à savoir la valeur n’est pas enregistrée dans la base de donnée lors de la soumission.

  25. @rogers750172 Est ce que le champs multilingue affiche un texte différent en chaque langue voulue dans le back &amp; front office ?
    Moi sur 1.7.4.4 ça ne fonctionne pas..

  26. Je viens de passer prestashop en version 1.7.5.0, j’ai retélécharger le zip puis je l’ai décompressé. J’ai mis le dossier obtenu « amproductfields » dans « www/modules/ » puis j’ai pris le fichier www/modules/amproductfields/doc_and_override/Product.php pour le déplacer vers www/override/classes/
    Et là… le module ne s’affiche même plus en français et il provoque un bug lors que je clique sur créer un nouveau produit: ça m’envoi sur le tableau de bord. j’ai été obligé de tout remettre d’origine pour pouvoir créer un nouveau produit.
    Plus je progresse, moins j’avance avec ce module…!
    Arnaud est ce que tu pourrais me dire comment faire fonctionner ce module sur la 1.7.5.0 (alors que ça marchait en 1.7.4.3) et comment le faire fonctionner en multinlingue (là ça n’a jamais fonctionné sur aucune version 1.7 par contre) ?
    Merci !

    1. Finalement j’ai trouvé la méthode et je l’ai expliqué dans ce forum:
      https://www.h-hennes.fr/blog/2017/10/19/prestashop-1-7-ajouter-des-champs-produit/#comment-21782
      Avec cette modif le module fonctionne bien pour ajouter des textes sous les photos produits de prestashop et en multilingue!
      Pour ce faire j’ai utilisé le module de Hervé Hennes et j’ai utilisé votre apport des lignes 74 à 77 du fichier www/themes/classic/templates/catalog/product.tpl (encore valable sous ps 1.7.5.0) et j’ai rajouté une touche personnelle de CSS pour en faire un élément qui parait natif à prestashop.

  27. Merci pour ce tuto, c’est exactement ce dont j’avais besoin ! J’ai juste besoin d’un léger coup de main, je travaille avec prestashop depuis une semaine, je ne trouve pas le fichier cache suivant : www/app/cache/prod/class_index.php dans mon ftp. Et voici donc ce qui s’affiche en dessous de l’image de mon produit : https://screenshots.firefox.com/9pVMvrJ2x59CxqCv/centuryprint.eu
    Pouvez-vous m’éclairer svp ? Ce serait vraiment génial merci

    1. Bonjour Kevin,
      Dans le dossier www/app/cache/ vous avez /prod/ et/ou /dev/ selon si vous activez le mode debug ou non 😉

  28. Bonjour,
    J’ai installé le module sur la version 1.7.5.0 de Pretashop mais aucune des valeurs ne sont enregistrées en base de donnée lors de la soumission. Y a t il une manip particulière à affectuer pour cette dernière version de Prestashop ?
    Merci pour votre aide.

    1. Bonjour Jer84,
      Une fois les données enregistrées, il faut ajouter la variable pour afficher les données dans le fichier .tpl voulu 😉

  29. Salut,
    Merci pour ton article, c’est toujours le bienvenu 🙂
    Il y a une coquille dans la méthode AmProductFields::hookDisplayAdminProductsMainStepLeftColumnMiddle($params).
    Tu passes en paramètre la variable $active à la méthode Language::getLanguages($active), mais elle n’est pas définie. Saurais-tu la définir ?
    Sinon, j’ai du mal à comprendre l’utilité de premier champ « custom_field ». Tu indiques une relation avec Lengow et le duplicate content. Est-ce une valeur personnalisée qui sera affichée qu’à l’export ?
    Merci

    1. Bonjour Flo,
      Merci pour ton commentaire.
      Je n’ai pas sous la main mon ordinateur pour regarder car en congés aussi avant que je mette à jour l’article, il faut regarder du côté de la Class Language.php quel paramètre est attendu pour $active.
      Concernant Lengow, dans mon cas spécifique, l’ajout des champs a permis d’utiliser pour les produits des informations supplémentaires à envoyer aux marketplaces 😉
      A bientôt !

  30. Bonjour Arnaud,
    Merci pour ton article qui est exactement ce que je recherche. Malheureusement j’ai un problème dans sa mise en place. Les données saisi dans l’un des 3 champs disponible s’enregistrent correctement en base de données mais ne s’affiche ni sur la fiche produit en front ni sur la fiche produit en back. As-tu une idée pour m’aiguiller ?

    1. Bonjour Jérôme,
      Dans ce cas, il faut bien vérifier tous les points du tutos car l’un n’est sûrement pas bon 😉
      Bon courage !

  31. Bonjour, merci beaucoup pour cet article.
    J’ai un petit soucis lors de l’affichage des valeurs dans le panier.
    La variable dans la balise « h2 » ne s’affiche pas et la variable dans la balise « p » affiche « Array ».
    Ma version de prestashop est 1.7.5.2
    Tout fonctionne parfaitement dans la page produit.
    Merci

    1. Bonjour,
      Dans ce cas, il faut modifier le controller adéquat et ajouter les champs à la requête SQL.

  32. Bonjour,
    merci pour votre tuto.
    Par hasard, auriez vous déjà essayé d’ajouter un champ prix (et non texte donc) afin que celui-ci puisse modifier le prix du produit ?
    merci !

    1. Bonjour,
      Je ne vous conseille pas de modifier le champ prix car l’impact n’est pas que sur l’affichage de la fiche produit (facture, admin…).

  33. Bonjour,
    Je tiens simplement à vous dire merci pour l’ensemble de votre travail, j’ai ajouté votre site dans mes favoris et je l’utilise régulièrement.
    Cordialement,

  34. bonjour, je n’arrive pas a télécharger votre module, je met bien mes informations mais je ne reçoit pas le lien de téléchargement

    1. Bonjour,
      Je viens de tester c’est fonctionnel, vous devez saisir votre nom et e-mail puis valider.
      Vous recevrez le lien par e-mail 🙂

  35. Bonjour,
    merci pour ce module très utile !
    Cependant, les champs multilingues ne s’enregistrent pas en base de données lorsqu’on a plusieurs boutiques et qu’on fait la modification en vue « toutes les boutiques ».
    Si on suit le principe de Prestashop, ça devrait modifier ce champ dans chaque boutique.
    Savez-vous d’où ce problème peut venir ?
    Merci !

  36. Bonjour,
    merci de votre réponse !
    mais je n’ai pas l’impression que la solution de Sylvain soit en rapport avec le multiboutique, il parle uniquement du côté multilingue ? Mon problème est dans le cas où un champ est multilingue, lors de sa modification en vue « toutes les boutiques »…

    1. Bonjour Agnès,
      Je n’ai pas eu l’occasion de tester en multiboutique, si vous arrivez à vos fins n’hésitez pas à poster ici la réponse pour en aider d’autres 😉

  37. gros problème avec le champ personnalisé supplémentaire dans la fiche produit
    Bonjour,
    Je demande pardon pour les erreurs de mon français, j’espère pouvoir me faire comprendre.
    J’ai un gros problème avec le champ personnalisé supplémentaire dans la fiche produit https://www.arnaud-merigeau.fr/prestashop-1-7-ajouter-des-champs-texte-aux-produits-2/.
    Votre module fonctionne parfaitement en insérant le champ personnalisé dans le détail du produit. Même si je l’insère dans la liste, il affiche parfaitement le champ, mais le choix de voir le détail d’un produit contenant des articles connexes (vous l’aimerez peut-être aussi) provoque une grosse erreur. si l’article dans la liste n’a pas de produits connexes, entrez dans les détails du produit et tout fonctionne correctement.
    Cela fait des jours que je suis fou de trouver une solution, mais je ne suis pas un programmeur, je peux faire des tentatives dangereuses.
    J’ai besoin de votre aide précieuse pour savoir comment résoudre la situation.
    Je vous envoie des pièces jointes.
    Merci et j’espère vous lire bientôt.
    Meilleurs voeux.
    Paola Marini

  38. Bonjour,
    merci pour ce tuto, j’ai un soucis pour ma part les données ne semble pas s’enregistrées. Avez vous tester sur 1.7.6.1 ?
    Merci d’avance.

  39. Bonjour,
    Pour information, j’ai ajouté la classe « translation-field » aux classes « tab-pane » dans le fichier « amproductfields/views/templates/hook/amproductfields.tpl » pour que le multilingue fonctionne et s’enregistre correctement dans la base de données, en tout cas sur la 1.7.6.1.

  40. Bonjour,
    Je suis à la recherche de solutions pour ajouter un champs de chargement d’une image. Avez-vous des conseils ou des pistes à suivre?
    Merci !

    1. Bonjour Cédric,
      Vous pouvez détourner l’information saisie dans le champ WYSIWYG en solution simple.
      Il est aussi possible d’ajouter un champ image mais ce n’est pas la même histoire.
      A voir pour un prochain tuto 😉

    2. En effet j’ai pensé à utiliser le champ WYSIWYG, mais je préfèrerai un champ image propre.
      Nous attendons avec impatience alors le tuto !!!

  41. Merci encore pour ce tuto, j’aimerai faire la même chose pour les déclinaisons, mais il semblerait que ma valeur ne soit pas prise en compte lors de la soumission du formulaire… J’ai adapté le code du tuto, je récupère bien la valeur lors du chargement mais celle ci n’est pas transmise.
    En regardant de plus prés la valeur du name ne semble pas bonne , les autres champs ont comme valeur de name un tableau, où chaque champ a une clef bien précise. je me suis donc dit que j’allais adapter le name de mon champ, sauf que là j’ai une erreur de Symfony qui me signale que le nouveau champ fournit est de trop et donc ne passe pas le validateur… bref je sens que je suis pas loin mais je bloque… Si quelqu’un a une idée
    Merci d’avance.

  42. Bonjour,
    Je voudrais savoir ce qu’il faut faire pour creer une section (dans l’édition de produit et onglet information) pour intégrer une case assez large ou je peux taper du texte et pouvoir l’enregistrer. Cette case serait a usage interne et sera seulement vu en backoffice prestashop par les administrateurs.
    Merci
    Jean-Baptiste

    1. Bonjour Jean-Baptiste,
      Vous pouvez utiliser le tuto et ne pas ajouter de variables dans les fichiers .tpl.
      Vous aurez ainsi des champs pour les produits seulement visibles en back office.

      1. Bonjour,
        L’article « [PrestaShop 1.7] Ajouter des champs texte aux produits » est pour PrestaShop 1.7 donc non ça ne fonctionne pas pour PrestaShop 1.6 mais après une courte recherche sur Google vous allez trouver 😉

  43. Bonjour,
    J’ai fait la demande pour recevoir le module, et lors du téléchargement je me retrouve avec une zip de 0 Ko.
    Est-ce qu’on peut le récupérer autrement ?
    Testé sous Chrome et Firefox.

    Merci

  44. bonjour ,a tous
    plus que débutant et ayant besoin de pal mal de détail sur ma facture j’ai trouvé ce module très intéressant et a ma portée, mais pourtant je bute sur quelques soucis , j’ai bien réussi a faire afficher les infos sur la description du produit , mais je n’arrive pas a faire appraitre dans le détail du panier au mieux que j’ai réussi il apparaît un »Array » en dessous du nom du produit, si quelqu’un arrive a faire comprendre a un vieux de 48 ans ce qu’il n’a pas du comprendre , je suis partant , merci