Jump to content

[Résolu] Récupérer la catégorie parente principale !


Recommended Posts

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 by dojbouli (see edit history)
Link to comment
Share on other sites

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

  • Like 1
Link to comment
Share on other sites

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

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