dojbouli Posted October 7, 2013 Share Posted October 7, 2013 (edited) Bonjour à tous, Voici mon soucis : Je suis dans une catégorie enfant, qui est elle même enfant d'une autre catégorie... Catégorie parente -> Catégorie enfante -> Catégorie enfante (Où je suis) Le nombre d'étage diffère dans chaque catégorie parente. Ce que je veux, retrouvez l'ID de la fameuse catégorie parente ! D'avance merci, Cdt, Kévin. Edited October 11, 2013 by dojbouli (see edit history) Link to comment Share on other sites More sharing options...
Martin Uker K Posted October 7, 2013 Share Posted October 7, 2013 J'ai déjà fait un script semblable, il faut faire un override de de Category.php pour y arriver. voici le code nécessaire. Le code n'est vraiment pas parfait côté performance (Même côté bonne pratique il laisse à désirer), je fait une boucle qui envoie une requête SQL par niveau parcourue. Si la profondeur franchit 11, je crois que le script serait de ~.7 secondes grosse modo sur mon hébergement. Pour du 7 niveaux et moins, ça fait la job. class Category extends CategoryCore { /** * Retourne une des categorie de premier niveau selon le niveau. */ public function getFirstLevelParentCategory($id_lang) { $id_current = (int)$this->id; while (true) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getrow(' SELECT c.*, cl.* FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.(int)$id_lang.') WHERE c.`id_category` = '.(int)$id_current.' AND c.`id_parent` != 0 '); if (!$result || $result['level_depth'] == 2) return $result; $id_current = $result['id_parent']; } } } Désolé si le script est gourmand, je n'avais pas de temps dans le cadre ce projet pour faire mieux, l'appel itératif était le plus simple à coder. Martin 1 Link to comment Share on other sites More sharing options...
dojbouli Posted October 8, 2013 Author Share Posted October 8, 2013 Merci énormément Martin ! Cette fonction me sauve la vie !!! (et ça va c'est relativement rapide pour le coup...) Link to comment Share on other sites More sharing options...
Martin Uker K Posted October 9, 2013 Share Posted October 9, 2013 Bon matin, Je suis heureux que cette surcharge (Override) puisse aider quelqu'un! J'ai bien dit que c'est relativement gourmand*, je suis un puriste dans l'âme pour ce qui est de la programmation et je tends à analyser la démarche plus que le résultat. L'implémentation que j'ai faites est fonctionnelle, mais elle pourrait être meilleure, par ailleurs la différence entre l'optimal et ce que j'ai fait (En terme de temps, le résultat) est négligeable dans un système à petite quantité de données (Moins de 700 catégories avec 7 niveaux). Tu pourras passé ce post en [RÉSOLU] dès que tu pourras! Martin 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