spip93 Posted March 5, 2019 Share Posted March 5, 2019 Bonjour à tous et à toutes, En regardant dans les logs errors d'un des sites que j'administre, sous Prestashop 1.6.1.5, j'ai plusieurs erreurs dont celle-ci : Trying to get property of non-object in /home/xxxxxxx/www/xxxxxxx/classes/Tools.php on line 1222 Et voici les lignes de codes du fichier tools.php : public static function getAdminTokenLite($tab, Context $context = null) { if (!$context) { $context = Context::getContext(); } return Tools::getAdminToken($tab.(int)Tab::getIdFromClassName($tab).(int)$context->employee->id); } (La ligne 1222 étant la ligne commençant par return Tools) J'ai le même problème que Kerlin il y a quelques jours Sauriez-vous quel est le problème et surtout comment le régler SVP ? D'avance merci Link to comment Share on other sites More sharing options...
Eolia Posted March 5, 2019 Share Posted March 5, 2019 A votre avis, quel est l'objet concerné dans cette ligne ? Link to comment Share on other sites More sharing options...
spip93 Posted March 5, 2019 Author Share Posted March 5, 2019 C'est une question rhétorique ? Aucune idée. Link to comment Share on other sites More sharing options...
Eolia Posted March 5, 2019 Share Posted March 5, 2019 Ben non moi je vois $context->employee->id donc soit pas de context (peu probable) soit pas d'employé (plus crédible) donc un module ou un bout de code qui cherche un employée là où il n'y en a pas^^ ou un fichier ajax mal écrit Link to comment Share on other sites More sharing options...
spip93 Posted March 6, 2019 Author Share Posted March 6, 2019 Comment je peux retrouver "le module ou le bout de code qui cherche un employée là où il n'y en a pas" ? Et ensuite (si et quand je retrouve le module ou le bout de code en question) ? Qu'est-ce que je dois faire ? Est-ce que je pourrais supprimer le bout de code qui pose problème ? .(int)$context->employee->id Link to comment Share on other sites More sharing options...
Eolia Posted March 6, 2019 Share Posted March 6, 2019 Euh... je ne suis pas dans votre boutique... - Commencer par activer le mode debug qui vous en dira plus sur la pile d'appel - Suivant la page où l'erreur survient, regarder les modules qui y sont liés - depuis quand l'erreur est arrivée ? Quelles modifications/ajouts/amj ont été effectuées ? Link to comment Share on other sites More sharing options...
spip93 Posted March 7, 2019 Author Share Posted March 7, 2019 J'ai (peut-être) trouvé une solution. Comme ça bloque quand $context->employee->id est appelé, je me suis dit qu'il fallait lui donner un id d'employé. Le problème c'est que comme tools.php est dans le dossier classes, si je fais une modif dans ce fichier, ça sautera à la première MAJ de Presta (même si je compte pas en faire de sitôt). Pour éviter ça, dans /override/classes, j'ai créé un fichier tools.php Dans ce fichier tools.php, j'ai mis le code suivant : <?php class Tools extends ToolsCore { public static function getAdminTokenLite($tab, Context $context = null) { $id_employe = Db::getInstance()->getValue('SELECT `id_employee` FROM `ps_employee` WHERE `lastname`=\'Nom_employe\''); if (!$context) { $context = Context::getContext(); } if(empty($context->employee)) { $context->employee = new Employee($id_employe); } return Tools::getAdminToken($tab.(int)Tab::getIdFromClassName($tab).(int)$context->employee->id); } } Ensuite, pour que l'override soit pris en compte, je suis allé dans /cache/ et j'ai supprimé le fichier class-index.php (que Presta a regénéré derrière). Ça a l'air de fonctionner. J'espère que ça aidera d'autres personnes Bonne journée Link to comment Share on other sites More sharing options...
Eolia Posted March 7, 2019 Share Posted March 7, 2019 Ben oui mais ce n'est pas la vraie solution, il faudrait mieux trouver le fichier ajax incorrect et le corriger... Link to comment Share on other sites More sharing options...
wikao Posted March 8, 2019 Share Posted March 8, 2019 Bonjour, Je m'immisce dans ce poste car j'ai un problème similaire. Voici les erreurs que j'ai : Trying to get property of non-object in df47a55c6bc62577e98bee2590ed79b1ce416650.file.product.tpl.php on line 738, referer: https://www.wikao.fr/7-tableaux-peinture Undefined index: featureValue in df47a55c6bc62577e98bee2590ed79b1ce416650.file.product.tpl.php on line 739, referer: https://www.wikao.fr/7-tableaux-peinture Et voici les 2 lignes en question dans le fichier file.product.tpl.php : <?php $_smarty_tpl->tpl_vars['featureName'] = new Smarty_variable((($_smarty_tpl->tpl_vars['featureName']->value).($_smarty_tpl->tpl_vars['feature']->value['name'])).("x"), null, 0);?> <?php $_smarty_tpl->tpl_vars['featureValue'] = new Smarty_variable((($_smarty_tpl->tpl_vars['featureValue']->value).($_smarty_tpl->tpl_vars['feature']->value['value'])).("x"), null, 0);?> Ce que je comprends pas c'est que les erreurs sont dans file.product.tpl.php alors que la page de référence (https://www.wikao.fr/7-tableaux-peinture) est une page catégorie. Les erreurs en question devraient soit se situer dans file.product-list.tpl.php soit faire référence à une page produit, PAS une page catégorie, non ? Qu'est-ce que vous en pensez ? Comment je peux corriger ces 2 erreurs ? Link to comment Share on other sites More sharing options...
Eolia Posted March 8, 2019 Share Posted March 8, 2019 C'est normal, le referer indique d'où vient l'internaute, donc il arrive d'une page catégorie et a cliqué sur un produit. Dans votre product.tpl il faut vérifier que la variable existe avant de l'utiliser... {if isset($featureName)} .... {/if} ou {if !empty($featureName} ... {/if} et pareil pour l'autre variable $featureValue Link to comment Share on other sites More sharing options...
wikao Posted March 8, 2019 Share Posted March 8, 2019 Ok, ça marche. Merci ! Par contre, dans le fichier product.tpl, j'ai pourtant ceci : {if isset($features) && $features} <!-- Data sheet --> <section class="page-product-box"> <h3 class="page-product-heading">{l s='Data sheet'}</h3> <table class="table-data-sheet"> {$dimensionsname = ''} {$dimensionsvalue = ''} {foreach from=$features item=feature} {if isset($feature.value)} {if ($feature.name=="Hauteur (en cm)") OR ($feature.name=="Largeur (en cm)") OR ($feature.name=="Profondeur (en cm)")} {$feature.name=$feature.name|substr:0:4|cat:"."} {$featureName=$featureName|cat:$feature.name|cat:"x"} {$featureValue=$featureValue|cat:$feature.value|cat:"x"} {elseif $feature.name=="Dimensions (en cm)"} {$otherdimensionName=$feature.name|escape:'html':'UTF-8'} {$otherdimensionValue=$feature.value|escape:'html':'UTF-8'} {else} <tr class="{cycle values="odd,even"}"> <td>{$feature.name|escape:'html':'UTF-8'}</td> <td>{$feature.value|escape:'html':'UTF-8'}</td> {/if} </tr> {/if} {/foreach} <tr class="{cycle values="odd,even"}"> {if $featureValue!=""} <td>Dimensions en cm ({$featureName|substr:0:-3})</td><td>{$featureValue|substr:0:-1}</td> {/if} </tr> </table> </section> J'ai pourtant des if isset, alors pourquoi ces erreurs ? Link to comment Share on other sites More sharing options...
Eolia Posted March 8, 2019 Share Posted March 8, 2019 Ben c'est du code maison pas trop bien écrit ça... {$featureName=$featureName|cat:$feature.name|cat:"x"} A quel moment $featureName est assigné/déclaré dans votre code ? $toto = $toto + 'texte'; What is $toto ? Link to comment Share on other sites More sharing options...
wikao Posted March 11, 2019 Share Posted March 11, 2019 (edited) Désolé, c'est mon prédécesseur qui a écrit ça => j'hérite d'un site en partie bugué Du coup, après {$dimensionsname = ''} {$dimensionsvalue = ''} et avant {foreach from=$features item=feature} J'ai mis ceci : {$featureName = ''} {$featureValue = ''} Par contre, depuis je n'ai plus l'erreur dans file.product.tpl.php, mais j'ai l'impression que ça a déplacé le problème, parce que depuis que j'ai mis ça, j'ai le nombre d'erreurs suivantes qui a augmenté : Undefined index: featureName in /home/wikao/www/www.wikao.fr/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 738 Trying to get property of non-object in /home/wikao/www/www.wikao.fr/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 738 Undefined index: featureValue in /home/wikao/www/www.wikao.fr/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 739 Trying to get property of non-object in /home/wikao/www/www.wikao.fr/tools/smarty/sysplugins/smarty_internal_templatebase.php(157) : eval()'d code on line 739 Avec, les lignes de code suivantes entre les lignes 722 et 739 dans le fichier smarty_internal_templatebase.php : /** * Return internal filter name * * @param callback $function_name * * @return string internal filter name */ public function _get_filter_name($function_name) { if (is_array($function_name)) { $_class_name = (is_object($function_name[0]) ? get_class($function_name[0]) : $function_name[0]); return $_class_name . '_' . $function_name[1]; } else { return $function_name; } } Je vois pas où est le rapport entre featureName et featureValue et le code ci-dessus. Avez-vous une idée ? Est-ce qu'il y a un lien de cause à effet entre les erreurs dans product.tpl et celles (maintenant) dans smarty_internal_templatebase.php ? Edited March 11, 2019 by wikao (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted March 11, 2019 Share Posted March 11, 2019 Il faut revoir vos bases et comment on assigne une variable Smarty dans un tpl... {assign var="featureName" value=""} Link to comment Share on other sites More sharing options...
wikao Posted March 12, 2019 Share Posted March 12, 2019 Pour revoir les bases encore faut-il que je les ai. Je suis déjà débutant en PHP, alors en smarty ... C'est un copain développeur qui m'a soufflé ces lignes de codes. Si je savais suffisamment développer, je ne serais pas ici à poser mes questions à la c... et les sites que j'administre ne seraient pas sous Presta mais en full PHP. (Ne le prenez pas mal, mais) Je vous remercie d'en tenir compte quand vous répondez aux posts (pas seulement aux miens), parce que ce qui peut vous paraitre évident/élémentaire, ou comme faisant partie des "bases", ne l'est pas (forcément) pour nous autres, pauvres mortels, souvent débutants. Ceci étant, merci pour votre aide Link to comment Share on other sites More sharing options...
Eolia Posted March 12, 2019 Share Posted March 12, 2019 Ok, alors la doc Smarty elle est là https://www.smarty.net/docsv2/en/ Ce qui me surprend toujours ce sont les gens qui écrivent du code et viennent nous dire "Ca ne fonctionne pas" Moi je n'ai qu'un regard extérieur et j'ignore votre pédigrée mais je lis le code que vous nous soumettez et ce que je vois m'inquiète plus qu'autre chose... Perso je n'ai jamais fait d'étude en informatique, mais avant d'écrire quoi que ce soit j'ai essayé de comprendre en observant le code existant et en lisant les docs. La base du truc, c'est la logique Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now