Prérequis
- AccĂšs administrateur Ă lâinterface PrestaShop.
- AccĂšs au serveur dâhĂ©bergement (SFTP/SSH) ou Ă un dĂ©pĂŽt Git pour dĂ©ployer les fichiers du thĂšme.
- Idéalement, intervention par votre agence ou votre équipe technique.
Recommandation
Travaillez sur un environnement de prĂ©production et sauvegardez le thĂšme avant toute modification. PrivilĂ©giez un thĂšme enfant pour Ă©viter dâĂ©craser vos changements lors dâune mise Ă jour.
1) Télécharger le thÚme
Il est possible de récupÚrer les fichiers du thÚme Prestashop.
2) Modifier le thĂšme
2.1 Identifier le template Ă mettre Ă jour
Selon la page ciblée, localisez le fichier adéquat. Exemples pour les thÚmes Classic / Hummingbird :
Fiche produit :
themes/<votre_theme>/templates/catalog/_partials/product-additional-info.tplCatégorie / listing :
themes/<votre_theme>/templates/catalog/listing/category.tpl
2.2 Choisir la position dans le code
InsĂ©rez le widget Ă lâendroit prĂ©cis oĂč il doit apparaĂźtre dans le template.
Astuce : repérez un élément ou un conteneur existant (classe CSS ou bloc Smarty) pour positionner le widget correctement.
2.3 Intégrer le code JOIN
Ătapes :
Récupérez le code du widget dans le JOIN Studio, onglet Intégration du widget.
Collez ce code dans le template ciblé et encadrez-le avec les balises
{literal}âŠ{/literal}pour Ă©viter lâinterprĂ©tation par Smarty.Remplacez toute occurrence de
<PRODUCT_ID>par{/literal}{$product.id_product}{literal}afin dâinjecter dynamiquement lâID produit PrestaShop.
Attention, lâid produit prestashop doit matcher la clĂ© offerId ou itemGroupId du merchant center connectĂ© Ă JOIN. Si ce nâest pas le cas, câest a vous de modifier ce code afin dâinjecter le bon id.
Exemple de code final :
<script>function sendAudienceData(a){window.jDataLayer=window.jDataLayer||[],window.jDataLayer.push({type:"audience",data:a})}</script>
<script>
document.addEventListener("DOMContentLoaded", () => {
const productId = "{/literal}{$product.id_product}{literal}"; /* <-- Dynamic product id */
const baseUrl = "https://join-stories.com/stories/widgets/page-produit";
const script = document.createElement("script");
script.setAttribute("src", baseUrl + "/" + productId + ".js"); /**Needed attribute for the script to works*/
script.setAttribute("type", "text/javascript");
script.setAttribute("data-join-widget-id", "join-widget-page-produit");
script.setAttribute("data-join-widget-alias", "page-produit"); /**Handle error & fallback*/
script.onerror = () => {
script.remove(); const fallback = document.createElement("script");
fallback.setAttribute("src", baseUrl + "/index.js");
fallback.setAttribute("type", "text/javascript");
fallback.setAttribute("data-join-widget-id", "join-widget-page-produit");
fallback.setAttribute("data-join-widget-alias", "page-produit");
document.head.appendChild(fallback);
};
document.head.appendChild(script); });
</script> <div id="join-widget-page-produit" style="display:block;"></div> <style> #join-widget-page-produit { margin: 5px 2px; min-height: 114px; width: 100%; } @media (min-aspect-ratio: 3/4) { #join-widget-page-produit { min-height: 132px; } } </style> {/literal}
3) Déployer et vider le cache
Déployez les modifications du thÚme sur le serveur (SFTP/CI).
Videz le cache pour prendre en compte les changements :
ParamĂštres avancĂ©sâPerformancesâ Vider le cache.Si la compilation Smarty est activĂ©e, forcez une recompilation si nĂ©cessaire.

