Jump to content

afficher ean13 (code barre) sur fiche produit


Recommended Posts

Bonjour à tous,

 

J'essaie de faire afficher l'ean13 sur ma fiche produit sous prestashop 1.5.4.1 et je n'y arrive pas je précise que ce sont des fois des declinaisons avec des code barre différents et des fois des produits sans déclinaisons.

 

Si qulqu'un a une idée ???

 

visiblement ce qu'on dit sur tous les forums pour les versions anterieures a changé :(

 

merci d'avance

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Je suis toujours à la recherche d'une solution, voici mon code de product.tpl :

  <p id="product_reference" {if isset($groups) OR !$product->reference}style="display: none;"{/if}>
   <label for="product_reference">{l s='Reference:'} </label>
   <span class="editable">{$product->reference}</span>
  </p>
  <p id="product_ean13" {if isset($groups) OR !$product->ean13}style="display: none;"{/if}>
  <label for="product_ean13">{l s='EAN 13 : '} </label>
   <span class="editable">{$product->ean13</span>
  </p>

Ça fonctionne bien pour pour la référence, (même pour les références des déclinaisons) mais pas pour l'EAN13 qui ne s'affiche que si j'ai une ean13 produit, pas pour les déclinaisons. Alors que j'ai absolument besoin d'afficher ce code pour chaque taille produit, donc chaque déclinaison.

En même temps, dans la BDD, les EAN13 des déclinaisons sont dans "product_atributs" (comme les "reference" d'ailleurs). J'en perd mon latin...

Link to comment
Share on other sites

Je continue ma recherche, j'ai ajouté (toujours dans product.tpl) le code suivant :

var productReference = '{$product->reference|escape:'htmlall':'UTF-8'}';
var productean13 = '{$product->ean13|escape:'htmlall':'UTF-8'}';
var productupc = '{$product->upc|escape:'htmlall':'UTF-8'}';

et ces 2 lignes dans ProductControler.php :

   $combinations[$row['id_product_attribute']]['ean13'] = $row['ean13'];
   $combinations[$row['id_product_attribute']]['upc'] = $row['upc'];

Mais je n'affiche toujours pas mon EAN13.

J'ai fait une erreur ?

  • Like 1
Link to comment
Share on other sites

T'es sur la bonne voie :

 

dans product.tpl

 

var productReference = '{$product->reference|escape:'htmlall':'UTF-8'}';
var productEan13 = '{$product->ean13|escape:'htmlall':'UTF-8'}';

 

  <p id="product_reference" {if isset($groups) OR !$product->reference}style="display: none;"{/if}>
<label>{l s='Reference:'} </label>
<span class="editable">{$product->reference|escape:'htmlall':'UTF-8'}</span>
  </p>
  <p id="product_ean13" {if isset($groups) OR !$product->ean13}style="display: none;"{/if}>
<label>{l s='EAN 13 : '} </label>
<span class="editable">{$product->ean13|escape:'htmlall':'UTF-8'}</span>
  </p>

en plus, t'avais oublié l'accolade de fin :P

 

Mais il va falloir aussi que tu retouches :

 

dans product.tpl

 

{if isset($groups)}
// Combinations
......
 addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', '{$combination.ean13|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, available_date, specific_price_combination);
{/foreach}
{/if}

 

et la fonction "addCombination" dans product.js

 

ainsi que la fonction "getAttributesGroups" dans Product.php

 

(rajouter la récupération de ean13 dans la requête SQL)

 

je te conseille d'activer le debug dans defines.inc.php :

@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', true);

Edited by Captain FLAM (see edit history)
Link to comment
Share on other sites

Trop cool Capitaine Flam qui répond à Albator... :P

Merci pour ce tuyau, je vois en effet une belle piste que je vais approfondir.

Je tiens la communauté au courant, j'ai vu que je n'étais pas le seul a chercher la solution. Je publierai celle qui fonctionne pour la dernière version (si je la trouve bien entendu).

Link to comment
Share on other sites

Trop cool Capitaine Flam qui répond à Albator... :P

 

J'étais sûr que t'allais me répondre ça ... :D

 

Merci pour ce tuyau, je vois en effet une belle piste que je vais approfondir.

Je tiens la communauté au courant, j'ai vu que je n'étais pas le seul a chercher la solution. Je publierai celle qui fonctionne pour la dernière version (si je la trouve bien entendu).

 

Nulle doute que tu la trouveras, petit scarabée B)

  • Like 1
Link to comment
Share on other sites

Bon j'avance toujours, mais lentement.

Quand j'ajoute à product.tpl le code

'{$combination.ean13|addslashes}'

le code ne s'affiche pas, mais en plus ça me fait disparaître la référence (sont j'ai aussi besoin). Peut-être un problème de compatibilité des versions...

 

D'autre part, je ne sais pas quoi ajouter dans les "getAttributesGroups" de Product.php.

Une idée ?

Link to comment
Share on other sites

Toujours personne pour m'aiguiller à part le Captain Flam qui m'a permis de bien avancer ?

J'ai un autre soucis avec la fonction "addCombination" dans product.js, qui me pose de problèmes dès que j'ajoute mes attributs ; l'agrandissement des images ne fonctionne plus.

Voici en PJ ce que j'ai.

Merci pour votre aide.

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Je relance le sujet parce que je tourne toujours en rond avec mon code :

			<p id="product_reference" {if isset($groups) OR !$product->reference}style="display: none;"{/if}>
				<label>{l s='Reference:'} </label>
				<span class="editable">{$product->reference|escape:'htmlall':'UTF-8'}</span>
			</p>

				<!-- Ajout EAN13 et UPC-->
		   <p id="product_ean13" {if isset($groups) OR !$product->ean13}style="display: none;"{/if}>
				<label>{l s='EAN 13 : '} </label>
				<span class="editable">{$product->ean13|escape:'htmlall':'UTF-8'}</span>
		   </p>

		   <p id="product_upc" {if isset($groups) OR !$product->upc}style="display: none;"{/if}>
				<label>{l s='UPC : '} </label>
				<span class="editable">{$product->upc|escape:'htmlall':'UTF-8'}</span>
		   </p>	

Mais ça ne fonctionne pas et le débug ne me trouve rien d'anormal.

Link to comment
Share on other sites

  • 2 weeks later...

Salut The Stef

 

Je viens de tomber sur ton Post qui ressemble malheureusement au mien et a priori nous en somme au même stade  :(

http://www.prestashop.com/forums/topic/277171-affichage-champ-dans-fiche-produit/

 

Je viens de bien relire ce que Captain Flam a ecrit et la il y a un point qui me chiffonne depuis que je travaille la dessus, c'est la requete sql. Je ne l'a trouve nulle part.

 

Et toi ?

 

Stef (un autre)

Link to comment
Share on other sites

@ Captain Flam :

un grand merci car en fait tu as presque tout donné dans tes explications.

Le petit bemol du presque est que pour la combinaison par défaut ca ne marche pas mais bon au moins j'avance  :)

 

@ The Steph :

 

Si ce n'est pas déjà fait pour admin/classes/product.php ou en override

 

 

public function getAttributesGroups($id_lang)
{
if (!Combination::isFeatureActive())
return array();
$sql = 'SELECT ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name,
a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, product_attribute_shop.`id_product_attribute`,
IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`,
product_attribute_shop.`default_on`, pa.`reference`,  pa.`ean13`,  pa.`upc`, product_attribute_shop.`unit_price_impact`,
product_attribute_shop.`minimal_quantity`,product_attribute_shop.`available_date`, ag.`group_type`
FROM `'._DB_PREFIX_.'product_attribute` pa
'.Shop::addSqlAssociation('product_attribute', 'pa').'
'.Product::sqlStock('pa', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
LEFT JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute` = pac.`id_attribute`)
LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON (ag.`id_attribute_group` = a.`id_attribute_group`)
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute`)
LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group`)
'.Shop::addSqlAssociation('attribute', 'a').'
WHERE pa.`id_product` = '.(int)$this->id.'
AND al.`id_lang` = '.(int)$id_lang.'
AND agl.`id_lang` = '.(int)$id_lang.'
GROUP BY id_attribute_group, id_product_attribute
ORDER BY ag.`position` ASC, a.`position` ASC, agl.`name` ASC';
return Db::getInstance()->executeS($sql);
}
 

Le code ci-dessus ne selectionnera pas ean13 et upc pour la declinaison par défaut ou si c'est le cas c'est que moi j'ai une coucougnette 

 

A priori ton code de ton product.tpl est ok donc si erreur il faudrait voir le product.js

  • Like 1
Link to comment
Share on other sites

The Steph,

 

 

Je vais réessayer avec ces nouvelles infos intéressantes. Par contre product.js est un peu sensible" à chaque fois que j'y touche j'ai un bug d'affichage...

Enfin entre Stephs et Super z héros... on va bien trouver.

euh malheureusement tu n'as pas le choix. Sans modif de ce fichier js tu n'auras rien

Link to comment
Share on other sites

  • 2 weeks later...

Bon j'ai remis le nez dans le guidon et en effet il faut bien tripoter poduct.js comme indiqué dans le topic suggéré par Captain Flam http://www.prestashop.com/forums/topic/68049-tips-afficher-le-poids-en-fonction-des-declinaisons/

Mais toujours d'après cet article, il est dit qu'il faut :

 

ajouter :
// Calcul et affichage du poids des produits var declined_weight = Number(selectedCombination['weight']) + Number(productWeight); if (selectedCombination['weight']) $('#product_weight').text(declined_weight); else if (productWeight) $('#product_weight').text(productWeight); $('#product_weight:hidden').show('slow');

après :
function updateDisplay(){

Seulement on n'a rien à calculer pour affihcer un EAN13 ou un UPC. Et j'ai tourné ça dans tous les sens, je ne trouve pas le code à mettre à cet endroit. Quelqu'un a une idée ?

  • Like 1
Link to comment
Share on other sites

J'ai quand même un souci en ajoutant '{$combination.ean13|addslashes}' à la ligne :

addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}');

Ca n'a pour effet que de supprimer la référence... Là je ne comprend pas pourquoi !

Link to comment
Share on other sites

Hello The_Stef

 

Voila ce que je ferais mais je suis pas sur de mon coup car il y a des différences entre ma 1.5.5 et la 1.5.4 pour ces deux fichiers.

 

product.tpl ligne 289

		addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', '{$combination.ean13|addslashes}', '{$combination.upc|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, available_date, specific_price_combination);

product.js

 

il faut prendre exemple sur reference ===> copie coller le pave relatif a reference et coller en dessous pour ean13 et une coller pour upc. En suite tu remplaces reference par ean13 ou upc

Link to comment
Share on other sites

  • 1 year later...

Bonjour à tous,


 


Après avoir longuement cherché sur le forum, je me permets de vous poser cette question.


 


Je cherche à faire apparaitre le code EAN( renseigné dans la fiche produit) à ces endroits :


 


- Mail de confirmation de commande adressé au client


- Facture PDF


- Export produits dans l'admin>catalogue>produits


 


Je n'ai pas besoin de faire apparaitre le code barre, simplement le nombre. ex = 3278230256453


 


Merci d'avance!


 


PS Version : 1.6.0.9


Edited by deepxfan (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...
  • 4 months later...

Bonjour,

 

Grâce à @Captain Flam... j'ai pu avancer tout comme vous et maintenant ça fonctionne.

Il ne restait plus qu'à modifier ProductController.php

 

Il faut ajouter la ligne suivante dans la fonction assignAttributesGroups()

 

$combinations[$row['id_product_attribute']]['ean13'] = $row['ean13'];

  • Like 1
Link to comment
Share on other sites

  • 11 months later...

Je remercie tout le monde pour votre aide précieuse. 

Malheureusement il y a eu quelques changements sur Prestashop 1.6 et je n'arrive pas à mettre à jour l'EAN selon les déclinaisons.

 

J'ai réalisé les modification suivantes : 

- dans Product.php, à la fonction getAttributesGroups j'ai remplacé 

pa.`reference`,

 par 

pa.`reference`,pa.`ean13`,

- dans product.tpl, j'ai ajouté

{if $product->ean13}
         <p id="product_ean13">
               <label>{l s='EAN'} </label>
               <span class="editable" itemprop="gtin13" content="{$product->ean13}">{if !isset($groups)}{$product->ean13|escape:'html':'UTF-8'}{/if}</span>
         </p>
{/if}

et

{addJsDef productEan13=$product->ean13|escape:'html':'UTF-8'}

- dans ProductController.php, j'ai modifié la fonction assignAttributesGroups() en ajoutant :

$combinations[$row['id_product_attribute']]['ean13'] = $row['ean13'];

- dans product.js, j'ai ajouté :

combinationsJS[k]['ean13'] = combinations[i]['ean13'];

dans la fonction addCombination, j'ai remplacé 

reference,

par

reference, ean13,

et ajouter 

combination['ean13'] = ean13;

dans la fonction findCombination, j'ai ajouté :

selectedCombination['ean13'] = combination['ean13'];

dans la fonction updateDisplay, j'ai ajouté : 

if (selectedCombination['ean13'] || productEan13)
{
    if (selectedCombination['ean13'])
    $('#product_ean13 span').text(selectedCombination['ean13']);
else if (productEan13)
    $('#product_ean13 span').text(productEan13);
    $('#product_ean13:hidden').show('slow');
}
else
    $('#product_ean13:visible').hide('slow');

Je ne pense pas être tout seul dans cette situation. Je croise les doigts en espérant que quelqu'un a la solution ;-)

Link to comment
Share on other sites

  • 3 weeks later...

 

Je remercie tout le monde pour votre aide précieuse. 

Malheureusement il y a eu quelques changements sur Prestashop 1.6 et je n'arrive pas à mettre à jour l'EAN selon les déclinaisons.

 

J'ai réalisé les modification suivantes : 

- dans Product.php, à la fonction getAttributesGroups j'ai remplacé 

OK

 par 

OK

- dans product.tpl, j'ai ajouté

 <p id="product_ean13">
    <label>{l s='EAN'} </label>
    <span class="editable" itemprop="gtin13" content="{$product->ean13}">{if !isset($groups)}{$product->ean13|escape:'html':'UTF-8'}{/if}</span>
 </p>
<!-- pas besoin de if, le js fait sont travail -->

et

OK

- dans ProductController.php, j'ai modifié la fonction assignAttributesGroups() en ajoutant :

OK

- dans product.js, j'ai ajouté :

OK

dans la fonction addCombination, j'ai remplacé 

OK

par

OK

et ajouter 

OK

dans la fonction findCombination, j'ai ajouté :

selectedCombination['ean13'] = combinations[combination]['ean13'];

dans la fonction updateDisplay, j'ai ajouté : 

OK

Je ne pense pas être tout seul dans cette situation. Je croise les doigts en espérant que quelqu'un a la solution ;-)

 

Voilà les quelques modifs pour que ça fonctionne chez moi.

Edited by Bondaty and Co (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 6 months later...

Hello, un grand merci pour ce petit tuto.  Qui fonctionne parfaitement pour les produits. Mon seul souci est qu'il récupère la variable principale. Pas celle des Déclinaisons, ou elle ne change pas. J’imagine qu'il faut que je modifie le variable récupéré mais je sèche un peu... quelqu'un aurait une idée ? Merci d'avance !

Link to comment
Share on other sites

Hello, un grand merci pour ce petit tuto.  Qui fonctionne parfaitement pour les produits. Mon seul souci est qu'il récupère la variable principale. Pas celle des Déclinaisons, ou elle ne change pas. J’imagine qu'il faut que je modifie le variable récupéré mais je sèche un peu... quelqu'un aurait une idée ? Merci d'avance !

Bonjour,

 

La modif fonctionne, il faut prendre les infos de Marmulet

et faire les 2 modifs que j'ai suggéré.

Videz les caches et supprimer le class_index.

 

Bonne journée

Christophe

Link to comment
Share on other sites

Bonjour,

 

La modif fonctionne, il faut prendre les infos de Marmulet

et faire les 2 modifs que j'ai suggéré.

Videz les caches et supprimer le class_index.

 

Bonne journée

Christophe

Hello merci pour la réponse rapide. Je vais repartir a zéro pour tester ta version. Lors de mon dernier test cela ne marchais tjs pas. dès que je remplaçais

çaa : selectedCombination['ean13'] = combination['ean13'];

par ça :  selectedCombination['ean13'] = combinations[combination]['ean13'];

 

Galerie planté, variations planté... Même après avoir vider le cache....

 

Link to comment
Share on other sites

 

Ok merci, bon  cela fonctionne avec une partie de tes modifications

 

 

Premier problème, j'avais oublier. D'overider  ça:

 

- dans ProductController.php, j'ai modifié la fonction assignAttributesGroups() en ajoutant :

$combinations[$row['id_product_attribute']]['ean13'] = $row['ean13'];

 

 

Ensuite j'ai utlisé ta modif:

 

<p id="product_ean13">

    <label>{l s='EAN'} </label>

    <span class="editable" itemprop="gtin13" content="{$product->ean13}">{if !isset($groups)}{$product->ean13|escape:'html':'UTF-8'}{/if}</span>

 </p>

<!-- pas besoin de if, le js fait sont travail -->

 

 

Par contre j'ai laissé ça:

 

dans la fonction findCombination, j'ai ajouté :

selectedCombination['ean13'] = combination['ean13'];

 

Vidé le cache, supprimé le fichier class_index et cela fonctionne maintenant.

 

En tous cas merci beaucoup ! ça m'a vraiment bien dépanné et permis de voir le cœur de Prestashop :)

Edited by Tatort (see edit history)
Link to comment
Share on other sites

  • 3 years later...

Je me permets une petite modif .... si vous faite comme cela ça va fonctionné mais vous aurez l'erreur dans la microdonnée pour le gtin13 ( google webmastertools ) supprimez simplement le content="{$product->ean13}" du product.tpl cela enleverra le problème

la bise le fofo

 

Link to comment
Share on other sites

une autre petit modif sinon ca fera un ean faux pour les produits sans déclisaison... dans le product.tpl

<p id="product_ean13">
<label>{l s='EAN:'} </label> 
     <span class="editable" itemprop="gtin13">{if !isset($groups)}{$product->ean13|escape:'html':'UTF-8'} {else}{$product->ean13|escape:'html':'UTF-8'}{/if}</span>
</p>

Link to comment
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...