Patrick_64 Posted November 26, 2012 Share Posted November 26, 2012 Bonjour, J'essaie depuis ce matin de faire un override sur une toute petite modification de la classe tools.php. J'ai bien sauvegarder ce fichier en local, j'ai bien modifié le nom de la classe avec extended : class Tools extends ToolsCore J'ai modifié juste 2 lignes pour éviter d'avoir le fil d'ariane en double dans la fonction publique : getPath et getFullPath. J'ai recopier le Tolls.php en entier dans /override/classes/ et là mon site s'est retrouvé bien planté. Quelqu'un aurait-il une idée ? Merci Patrick Link to comment Share on other sites More sharing options...
Mellow Posted November 26, 2012 Share Posted November 26, 2012 Bonjour, La fonction override est parfois assez capricieuse, mais généralement en suivant bien les règles ça marche plutôt bien. Notamment il vaut mieux ne garder dans le fichier override que le stricte nécessaire (donc la fonction modifiée) Ton fichier override devrait donc ressembler à ça : <?php class Tools extends ToolsCore { public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products') { /* ici la fonction getPath modifiée */ } } Si avec ça ça plante encore, peut-être qu'il y a une erreur qui s'est glissée dans ta modif... Link to comment Share on other sites More sharing options...
coeos.pro Posted November 26, 2012 Share Posted November 26, 2012 il faudrait avoir le contenu de ton fichier override, ce serait plus parlant. Link to comment Share on other sites More sharing options...
Mellow Posted November 26, 2012 Share Posted November 26, 2012 (edited) Oups!!! Sorry mauvaise manip. J'avais répondu un peu vite, croyant que le post précédent venait de l'auteur original du sujet Edited November 26, 2012 by Mellow (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted November 26, 2012 Share Posted November 26, 2012 lol, j'ai pas vu ton message mais j'imagine ta surprise Link to comment Share on other sites More sharing options...
romda Posted December 12, 2012 Share Posted December 12, 2012 Pas de solution ou de guide pour ce problème ? J'ai également modifié la fonction getPath() pour avoir un fil d'Ariane avec des microdata Schema.org dedans. Ben ça ne marche pas malgré le respect de la mise en place de la surcharge. Je crée un fichier /override/classes/Tools.php vide et j'y ajoute les lignes suivantes :class Tools extends ToolsCore // Une classe Tools qui étend la classe ToolsCore définie dans /classes/ (l'orginal) { /** * Get the user's journey * * @param integer $id_category Category ID * @param string $path Path end * @param boolean $linkOntheLastItem Put or not a link on the current category * @param string [optionnal] $categoryType defined what type of categories is used (products or cms) */ public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')// etc. etc. Je vide tout le cache : je désactive tous les caches, puis je vais vider /tools/smarty/compile/ (SAUF le 'index.php' !). Ça peut se trouver sous smarty_v2 si vous utiliser la v2, j'utilise la v3 perso. Ça marche ! Mon fil d'Ariane est optimisé pour la sémantique. Puis les problèmes commencent, les modif's de fiches produits dans l'admin commencent à mouliner et le comportement général part en vrille... J'ai bien tenté de copier tout le fichier Tools.php et de le modifier (nom de le classe) en le copiant sous /override/classes/ mais rien à faire, il y a conflit. À quoi sert ce _Tools.php et pourquoi la surcharge ne marche-t-elle pas partout de la même manière, je ne saurais le dire. Perso je vais modifier mon fil d'Ariane via un module ou bien modifier la classe pour qu'elle sache utiliser un breadcrumb.tpl cat là tout est en dur dans le PHP avec des "echo", ça ne respecte pas le modèle de Prestashop. J'ai beaucoup de soucis avec la surcharge en général, alors soit c'est mal implémenté, soit je ne comprends rien et je suis mauvais, ce qui est tout à fait possible. Link to comment Share on other sites More sharing options...
coeos.pro Posted December 12, 2012 Share Posted December 12, 2012 1- nouveau problème = nouveau post 2- il faut être précis et détailler le problème, tu n'aura jamais d'aide en mettant "Ben ça ne marche pas..." Link to comment Share on other sites More sharing options...
romda Posted December 12, 2012 Share Posted December 12, 2012 Si tu as pris le temps de répondre, tu aurais aussi pu prendre le temps de lire tout le post : j'ai tout détaillé, ce qui marche, ce qui ne marche pas. Quant au problème, il n'a rien de nouveau et est tout à fait dans le sujet : l'override de Tools.php ne fonctionne pas. Link to comment Share on other sites More sharing options...
Mellow Posted December 13, 2012 Share Posted December 13, 2012 Bonjour, coeos.pro n'a pas tord, ton problème semble différent puisque l'override a l'air de fonctionner mais ça provoque des problèmes ailleurs... Comme je l'ai déjà dis plus haut, l'override est parfois assez capricieuse. Mais dans ton cas je pencherais plus pour un problème dans le code modifié de la fonction getPath() Cette fonction semble souvent appelé, aussi bien en front qu'en back office, alors on peut supposer que si quelque chose cloche la dedans ça peut facilement se répercuter ailleurs. Le fichier _Tools.php est une classe de débogage (il ajoute des fonctions de débogage supplémentaires lorsqu'on le renomme en Tools.php) Tu ne donne pas non plus ta version de Prestashop, mais pour comparaison voici le contenu de mon fichier override/classes/Tools.php (PS1.4.9) Mes modifs consistent justement à ajouter les fonctionnalité de Rich Snippet Google au fil d’ariane, et ça marche parfaitement sans aucune interférence ailleurs. Si ça peut aider... <?php class Tools extends ToolsCore { public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products') { global $link, $cookie; if ($id_category == 1) return '<span class="navigation_end">'.$path.'</span>'; $pipe = htmlentities(Configuration::get('PS_NAVIGATION_PIPE'), ENT_QUOTES, 'UTF-8'); if (empty($pipe)) $pipe = '>'; $fullPath = ''; if ($categoryType == 'products') { $category = Db::getInstance()->getRow(' SELECT nleft, nright FROM '._DB_PREFIX_.'category WHERE id_category = '.(int)$id_category); if (isset($category['nleft'])) { $categories = Db::getInstance()->ExecuteS(' SELECT c.id_category, cl.name, cl.link_rewrite FROM '._DB_PREFIX_.'category c LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category) WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)$cookie->id_lang.' AND c.id_category != 1 ORDER BY c.nleft ASC'); $n = 1; $nCategories = count($categories); foreach ($categories as $category) $fullPath .= (($n < $nCategories OR $linkOntheLastItem) ? '<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'" itemprop="url"><span itemprop="title">' : ''). htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8'). (($n < $nCategories OR $linkOntheLastItem) ? '</span></a></div>' : ''). (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : ''); return $fullPath.$path; } } elseif ($categoryType === 'CMS') { $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang)); if (!Validate::isLoadedObject($category)) die(self::displayError()); $categoryLink = $link->getCMSCategoryLink($category); if ($path != $category->name) $fullPath .= '<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.self::safeOutput($categoryLink).'" itemprop="url"><span itemprop="title">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</span></a></div><span class="navigation-pipe">'.$pipe.'</span>'.$path; else $fullPath = ($linkOntheLastItem ? '<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a href="'.self::safeOutput($categoryLink).'" itemprop="url"><span itemprop="title">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</span></a></div>' : ''); return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType); } } } Link to comment Share on other sites More sharing options...
Mellow Posted December 13, 2012 Share Posted December 13, 2012 lol, j'ai pas vu ton message mais j'imagine ta surprise Finalement j'ai quand même fini par le mettre, le contenu de mon fichier... LOL Link to comment Share on other sites More sharing options...
romda Posted December 15, 2012 Share Posted December 15, 2012 Bonjour, Merci beaucoup de vos réponses - en effet j'ai oublié, mon appli prestashop est la 1.4.9.0. @Mellow Nous avons exactement la même classe en surcharge, mes problèmes viennent en fait d'effets de bord très étrange causés par le module ebay depuis peu, tout mon BO est touché, j'ai un client qui hurle, c'est un peu la 4ième dimension ^^... Le fil d'Ariane (ou « breadcrumb ») fonctionne parfaitement ainsi, merci. 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