Jump to content

PS 161 : Disparition des balises </body></html> lorsque "defer javascript" activé


Recommended Posts

Bonjour,

 

Suite à la mise à jour vers prestashop 1.6.1, je fais un tour de ma boutique afin de vérifier que tout va bien avant la mise en prod, mais de temps en temps, des erreurs de JS non chargés surviennent, ce qui me pousse à aller voir le code généré.

 

Et là, surprise, la fin du code source n'apparait pas : la dernière balise est :

});
</script>

Par contre quand je désactive le defer js, la fin du code est :

[...] type='text/css'>
</body></html>

Avez-vous aussi rencontré ce genre de problème ? Savez-vous où je peux regarder ? J'ai désactivé tous les overrides mais le problème est toujours là ...

 

Merci pour votre aide.

Link to comment
Share on other sites

Si tu veux avoir les balises fermantes va dans classes/controller/Controller.php, dans la fonction smartyOutputContent tu as:

if ($defer)
echo $html.$javascript;

change le par:

if ($defer)
echo $html.$javascript.'</body></html>';

Si c'est ok pour toi, passe ensuite par un override.

Edited by coeos.pro (see edit history)
Link to comment
Share on other sites

Merci Fanatic, c'est bien ce que j'avais fait, mais c'est quand même étrange de devoir faire un override de smartyOutputContent pour avoir des balises </body></html>

 

Je voulais savoir si d'autres personnes avaient aussi ce problème, si oui c'est un bug à corriger rapidement chez PS. Si non, alors il faut que je localise le problème, mais étant donné que je l'ai en désactivant tous les overrides ça semble venir du Core.

Link to comment
Share on other sites

Lorsque l'on compare avant et après, on se rend assez vite compte du problème :

 

Classe : /classes/controller/Controller.php

Avant :

echo ($defer ? $html.$javascript : preg_replace('/(?<!\$)'.$js_tag.'/', $javascript, $html)).$live_edit_content.((!isset($this->ajax) || ! $this->ajax) ? '</body></html>' : '');

Après :

if ($defer)
	echo $html.$javascript;
else
	echo preg_replace('/(?<!\$)'.$js_tag.'/', $javascript, $html).$live_edit_content.((!isset($this->ajax) || ! $this->ajax) ? '</body></html>' : '');

On se rend bien compte que dans le cas ou $defer est à true, toute la partie suivante n'est jamais ajoutée à la source :

.$live_edit_content.((!isset($this->ajax) || ! $this->ajax) ? '</body></html>' : '');

Toutes les boutiques sous PS161 doivent donc être affectée.

Si un membre de l'équipe de développement pouvait se manifester pour nous éclairer.

 

Merci pour vos retours !

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...