Intégrer du JavaScript dans une page produit PrestaShop
Comment ajouter du JavaScript personnalisé sur vos fiches produits PrestaShop 1.6, 1.7 et 8.x : hooks, modules, bonnes pratiques et pièges à éviter.
En bref : Pour intégrer du JavaScript sur une fiche produit PrestaShop, utilisez {literal} dans les templates Smarty en 1.6, ou créez un module avec registerJavascript via le hook actionFrontControllerSetMedia en 1.7/8.x. Évitez d'insérer du JS dans la description longue car TinyMCE le supprime.
Pourquoi intégrer du JavaScript sur une fiche produit ?
La personnalisation des fiches produits est un besoin récurrent en e-commerce. Qu'il s'agisse d'ajouter un système "Voir plus / Voir moins" sur la description longue, d'intégrer un calculateur de prix dynamique ou d'afficher un carrousel personnalisé, le JavaScript reste l'outil incontournable pour enrichir l'expérience utilisateur.
Le problème, c'est que PrestaShop utilise des moteurs de templates (Smarty en 1.6/1.7, puis Twig dans certains contextes en 8.x) qui peuvent entrer en conflit avec la syntaxe JavaScript. Voici les méthodes fiables pour intégrer vos scripts sans casser votre boutique.
Méthode 1 : Injection directe dans le template (PrestaShop 1.6)
Sur PrestaShop 1.6, le moteur Smarty interprète les accolades {} comme des balises de template. Or, le JavaScript en est truffé. C'est la source d'erreur numéro un pour les développeurs qui débutent avec PrestaShop.
La balise `{literal}` : votre alliée
Pour indiquer à Smarty d'ignorer un bloc de code, encadrez-le avec {literal} et {/literal} :
{literal}
<script type="text/javascript">
function toggleDescription() {
var desc = document.getElementById('full-description');
var btn = document.getElementById('toggle-btn');
if (desc.style.display === 'none') {
desc.style.display = 'block';
btn.textContent = 'Réduire';
} else {
desc.style.display = 'none';
btn.textContent = 'En savoir plus';
}
}
</script>
{/literal}
Où placer ce script ?
Deux options recommandées :
Option A — Dans product.tpl (spécifique au produit) :
Placez le script en fin de fichier themes/votre-theme/product.tpl. L'avantage : il ne se charge que sur les pages produits.
Option B — Dans footer.tpl avec condition :
Si vous préférez centraliser vos scripts personnalisés, injectez-les dans footer.tpl juste avant la balise
