Jump to content

smarty cache Array to string conversion


Recommended Posts

Bonjour à tous,

 

je développe un module pour moi dans lequel j'assigne

$smarty->assign(array(
                […]
                'metasocial_image'=> $metasocial_image,

ou $metasocial_image est un tableau

 

mais le souci est que j'ai un problème lors de la mise en cache

PHP Notice:  Array to string conversion

je sais que ce n'est qu'une notice' mais je me demande si ca ne pose pas un problème sur la mise en cache.

 

 

 un gentil dev passant dans le coin pourrais t il me dire si ca pose un problème et comment y remédier?

 

 

Link to comment
Share on other sites

Ben rien à voir avec le cache, si vous avez cette notice c'est que vous tentez d'afficher un tableau directement, ce qui est impossible (à moins d'utiliser print() ou var_dump() )

Donc votre tpl doit avoir un bug

{$metasocial_image} donnera une erreur

{$metasocial_image.image} pourrais fonctionner si image est un index du tableau et possède une donnée affichable

  • Like 1
Link to comment
Share on other sites

merci mais les log me signale le pb sur le cache
 

 

 PHP Notice:  Array to string conversion in […].file.metasocial.tpl.cache.php on line 55

 

        <?php }?><?php if (($_smarty_tpl->tpl_vars['metasocial_image']->value)) {?><meta name="twitter:image" content="<?php echo $_smarty_tpl->tpl_vars['metasocial_image']->value;?>

 

à l'affichage j'utilise un foreach

{if ($metasocial_image)}{foreach from=$metasocial_image item=foo}<meta property="og:image" content="{$foo}" />{/foreach}{/if}
Link to comment
Share on other sites

{if isset($metasocial_image)}{foreach from=$metasocial_image item=foo}<meta property="og:image" content="{$foo}" />{/foreach}{/if}

Serait sans nuls doutes plus juste et devrait moins poser problème.

 

Le cache, c'est juste pour dire que c'est le fichier template mis en cache. C'est bien sur le tpl, sinon.

  • Like 1
Link to comment
Share on other sites

merci à vous 2.

 

Le problème venait effectivement du tpl.

Il me restait affichage de $metasocial_image non traité en array

 

P.S: au sujet de php7 je l'utilise qu'en dev. prévoyant de passer les serveurs de prod d'ici guelque semaine.

et je n'ai aucun soucis majeur

Link to comment
Share on other sites

En regardant l'erreur de plus près je constate que la ligne incriminée ne correspond pas à celle du foreach:

meta name="twitter:image" n'existe pas dans votre boucle tpl

 

De plus Smarty a raison de claquer une erreur

<?php if (($_smarty_tpl->tpl_vars['metasocial_image']->value)) {?><meta name="twitter:image" content="<?php echo $_smarty_tpl->tpl_vars['metasocial_image']->value;?>

Correspondrait au code tpl suivant:

{if ($metasocial_image)}<meta name="twitter:image" content="{$metasocial_image}" />{/if}

Donc, regardez du coté du bloc qui traite de Twitter plutôt que de celui qui traite de FB...

 

PS: Faites comme vous voulez pour PHP7, mais si je vous le dis c'est que les problèmes existent et que vous serez obligé de réécrire toutes les lignes utilisant des statiques se référant à des variables. Vous n'avez certainement pas encore fait tourner ces lignes dans vos tests, mais il y en a plus d'une trentaine dans le code...

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

effectivement $metasocial_image est utilisé 2 fois et je ne regardais par la bonne.

 

PS: Pour PHP7, je vous crois! on parle bien sur la 1.6.1.4?

Vous faite référence à ce genre de correctif ?

 - if (!Validate::$function($value)) { 
+ if (!Validate::{$function}($value)) {

?? prestashop annoncait 1.6.1.4

Here are the changes that 1.6.1.4 brings:

  • PHP 7 is now fully supported

 

 

http://build.prestashop.com/news/prestashop-1614-maintenance-release/

 

 

 

L'erreur vient il de me signature qui indiquait la 1.6.0.9???

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

Exactement, mais ce genre de correctif (d'ailleurs il en manque beaucoup dens le PR) n'a jamais été mergé dans les versions 1.6.

 

J'ai l'archive 1.6.1.4 sous les yeux et le code d'origine est toujours là.

Idem dans celle de la 1.6.1.5, ligne 511 de /classes/AdminTab.php par exemple:

if (!Validate::$function($value)) {
Link to comment
Share on other sites

La méthode bullshit marketing classique de PrestaShop.

1/ On annonce c'est total compatible avec X,Y ou Z et que c'est stable

2/ Les utilisateurs plantent leurs shops, viennent sur le forum demander de l'aide.

3/ La communauté les dépanne, et si vraiment au bon de 6/8 mois ils n'ont toujours pas fait de PR on va peut-être envisager de regarder comment ils ont corrigé pour s'en inquiéter, on Google une solution à 2balles, on la commit.

4/ Comme ils (les dépanneurs) n'ont pas joué le jeu on va bien leur en faire l'allusion.

5/ On se glorifie du nouveau code (plus mieux, plus rapide, plus climax) dans une autre annonce type "dieux du code" et retour en 1

 

PS: Si ils font un PR en 3 on va bien le laisser pourrir, leur demander de le refaire tous les 3/4 mois sur la dernière branche - ils abandonneront après +/- 2ans et demi

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

Rien de nouveau sous le soleil^^

 

Certains PR remontent à 2012 (1.5) et quand on a demandé il y a un an pourquoi ils étaient toujours en "pending" on nous a répondu que la 1.5 n'était plus suivie. Pourtant le code n'a pas changé pour ceux-ci.

On nous demande alors de refaire un PR dans la nouvelle version, de le retester et ça repart en "Pending"

 

Forcément, au bout d'un moment, ça lasse... :(

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