Jump to content
Cédric Girard

Récupérer l'id_image (du produit en page produit) dans le header ?

Recommended Posts

Bonjour

 

Dans le cadre de l'intégration d'un marqueur Open Graph sur les boutiques que je gère (en vue de compléter les infos liées aux réseaux sociaux lors des actions "J'aime", "+1" et autres), je rencontre une difficulté sur une boutique en v1.3.

 

En l'occurrence, l'id_image ne s'intègre pas ou n'est pas lu quand je suis dans une page produit.

 

J'utilise l'excellent module open source Facebook Opengraph for Prestashop ; seulement lors de l'intégration les URL des images n'ont pas d'id_image (et j'obtiens du coup des URL du style "1234--large.jpg" au lieu de "1234-5678-large.jpg")

 

J'ai tenté diverses modifications du module de manière à modifier la variable rapportée dans le template :

<meta property="og:image" content="{$absoluteBaseUrl}img/p/{$id_product}-{$image.id_image}-large.jpg" />

 

Mais cela ne fonctionne pas et id_image demeure désespérément vide <_<

 

Une idée ?

Share this post


Link to post
Share on other sites

Bonjour,

 

Je ne connais pas ce module, mais avez-vous vu du coté du PHP ?

 

Est-il possible de coller le code générant la variable $image ?

Share this post


Link to post
Share on other sites

Hello,

 

Je ne connaisait pas ce module non plus mais j'était en train d'en dev un similaire. j'ai pas mal de mauvais retour client car quand ont clique sur partager il y a pas le bon aperçu. Ce module permet de régler ce genre de problème ?

 

Sinon tu peut toujours récupérer l'id d'un produit via un simple get en php. L'url rewrite n'est qu'une "facade" pour les moteur de recherche mais derrière c'est toujours les même variable qui sont chargés.

 

$id_product = $_GET["id_product"]

Share this post


Link to post
Share on other sites

Merci pour votre passage. En fait l'id_product remonte bien, c'est l'id_image qui manque à l'appel :mellow:

 

Dans la version originale de ce module open source, c'est {$id_image} tout court au niveau du fichier tpl (c'est moi qui ait rajouté la variable image au gré de mes essais, m'inspirant de product.tpl, mais dans les deux cas l'id de l'image ne remonte pas...)

Share this post


Link to post
Share on other sites

Yep

 

J'ai remis le code comme à l'initial, voici la partie PHP dédiée aux caractéristiques du produit :

 

/**
* Product specific META data
*/  
 if (self::isProductPage()) {
	$id_product = $_GET['id_product'];
	if ($_DEBUG == 1) {
	  echo 'IdProduct: '.$id_product.'</br>';
	}
	$smarty->assign('id_product', $id_product);

	$productImages = Image::getImages($id_lang, $id_product);
	if ($_DEBUG == 1) {
	  echo 'ProductImages: ';
	  print_r($productImages);
	  echo '<br/>';
	}

	if (is_array($productImages) AND sizeof($productImages)) {

	  $productImage = $productImages[0]['id_image'];
	  $smarty->assign('id_image', $productImage);
	  if ($_DEBUG == 1) {
		echo 'IdImage: '.$productImage.'<br/>';
	  }		  
	}	  
 }

 

Et celle au niveau du fichier tpl :

<meta property="og:image" content="{$absoluteBaseUrl}img/p/{$id_product}-{$id_image}-large.jpg" />

 

La boutique tourne en v1.3.0 (oui je sais, faudra que je fasse une MAJ...) ; précision : j'ai forcé la langue à l'ID 2 du fait que la boutique est en français.

Share this post


Link to post
Share on other sites

J'ai fait des tests de mon côté :

 

La fonction marche bien et récupère bien ce qu'il faut..

 

$images = Image::getImages(2, 1);
$smarty->assign('test', $images);
$smarty->assign('test2', $images[0]['id_image']);

 

2 étant le FR et 1 l'iPod Nano lors de la création d'un nouveau prestashop. Je récupère bien un id : 37.

 

Pouvez me dire :

- la valeur d'id_product (votre echo)

- la valeur d'id_lang (faire un echo)

- la valeur du tableau retourné (votre print_r)

Share this post


Link to post
Share on other sites

Euh je n'ai pas activé le debug car la boutique est en prod :rolleyes: mais effectivement un print_r sur le tableau devrait me fixer définitivement !

 

Edit : voilà qui est fait.

 

ProductImages: Array ( [0] => Array ( [id_image] => 2552 [id_product] => 1989 [position] => 1 [cover] => 1 [id_lang] => 2 [legend] => POELE A CREPES ANTI-ADHESIVE CHOC DE BUYER ) )

 

Ce que je ne comprends pas, c'est que l'id_image est bien présent !!!

 

 

Du coup je me demande si le problème ne vient pas de la "transmission" de la variable Smarty...

Share this post


Link to post
Share on other sites

Si votre site est en prod., vous pouvez utiliser la fonction file_put_contents de cette façon :

 

file_put_contents('debugPrintR.txt', print_r($array, true));

 

Si le deuxième paramètre de print_r vaut true, alors print_r renverra une chaine de caractères à la place d'afficher directement le résultat.

Share this post


Link to post
Share on other sites

Si ta boutique est en prod utilise mon module :http://www.coeos.pro/boutique/fr/modules-prestashop/43-debug.html

Share this post


Link to post
Share on other sites

BON.

 

J'ai trouvé la solution. J'ai renommé la variable Smarty (id_image) en "fb_id_image" (il y avait peut-être une "interférence" avec la variable existante dans product.tpl ?) et surtout j'ai forcé la compil Smarty car ce c.. ne prenait pas mes modifications en temps réel :ph34r:

 

Quoi qu'il en soit, avec le code d'origine ça ne fonctionnait pas. Je n'ai pas pensé à repasser en "force_compil = true" au niveau du paramétrage Smarty...

Share this post


Link to post
Share on other sites

bonjour,

merci pour votre post.

ceci dit prestashop a changé la manière d'écrire les URL des images.

voici un exemple :

http://www.domain.com/idproduct-idimage-large/nomdelimage-b.jpg

 

comment puis je configurer le og:image en sachant que à la base c'était ceci (qui ne fonctionnait d'ailleurs pas :

<meta property="og:image" content="{$absoluteBaseUrl}/img/p/{$id_product}-{$id_image}-large.jpg" />

 

merci pour votre aide

Share this post


Link to post
Share on other sites

Bonjour,

 

Apparement, comme indiqué dans la section "Debugging" sur la homepage du projet, pour que l'id de l'image soit récupéré et que le lien vers celle-ci fonctionne correctement, il faut forcer la langue par défaut du site dans le fichier "fbopengraph.php" (ligne 136 de la fonction hookHeader).

 

J'ai remplacé

$id_lang = $_GET['id_lang'];

par

$id_lang = 2;

(la langue par défaut en FR pour mon cas) et ça a fonctionné contrairement aux manipulations précédentes.

 

Voilou !

:)

Share this post


Link to post
Share on other sites

Bonjour, j'ai le même problème sur mon site => http://www.wineandbee.com/blog/bientot-sur-le-blog-n8

 

Aucune remontée sympathique d'image quand je partage sur FB...

 

Si je vous ai bien lu, le problème vient du fichier header.tpl de mon thème...mais difficile pour moi de deviner ou et comment intervenir..

 

Par exemple, je n'ai pas de balise meta property mais meta name dans le code =>

<meta charset="UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />
 
Auriez vous svp une piste pour me permettre d'afficher des choses sympas ??
 
Un grand merci par avance 

Share this post


Link to post
Share on other sites

Bonjour,

Je ne sais pas si vous avez réussi à trouver la solution depuis.

Voici ce qui a marché pour moi :

https://www.prestashop.com/forums/topic/274531-open-graph-tags/

Juste pour que l'image récupéré soit la bonne il faut faire un if :

{if $page_name=='product'}
        <meta property="og:image" content="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')}"/>
{else}
        <meta property="og:image" content="https://www.monsite.fr/img/logo.jpg"/>
{/if}

Il faut que les images soit en 600*600 et ça fonctionne parfaitement.

Share this post


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

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More