Jump to content

Problème d'affichage retour function (Class Product)


Recommended Posts

Bonjour à tous, Je me permets de vous contacter pour essayer d'obtenir des informations pour mon problème. Je travail sur la version 1.7 de Prestashop.

 

A ce jour j'essaye de récupérer la catégorie principal (level_depth = 2), la catégorie présente directement après l'accueil.

 

Pour ce faire j'ai ajouter une fonction dans la class Product :

public static function getCategBdd($id){
    
        $results = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'category` WHERE `id_category` = '.$id);
        
        foreach ( $results as $f ){
            
            $id_parent   = $f['id_parent'];
            $level       = $f['level_depth'];
                        
            if($level != 2){
                Product::getCategBdd($id_parent);
            } else {
                $result = Db::getInstance()->getValue('SELECT name FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = ' . $id);
                echo $result;
            }
        }        
    }

Et dans le fichier product.tpl j'appel ma fonction en question :

{Product::getCategBdd($category->id)}

Avec l'utilisation du "echo $result" j'obtiens bien ma catégorie souhaité à l'affichage pour cet exemple "ELECTRICITE".

 

Cependant lorsque je souhaite transformer mon echo en "return" afin de pouvoir effectuer un test dessus je n'arrive pas à l'obtenir depuis le fichier tpl.

 

Afin de tenter de récupérer cette variable je procède actuellement de cette façon :

{$data = Product::getCategBdd($category->id)}
 {$data}

Avec ce bout de code je n'obtiens aucunes erreur, mais aucun affichage non plus.

 

Je ne souhaite pas obtenir du code bettement, je souhaite en priorité comprendre mon erreur et apprendre la meilleure façon pour procéder a mon attente.

 

Je vous remercie d'avance et vous souhaite à tous une bonne soirée.

Link to comment
Share on other sites

Merci okom3pom pour ta réponse rapide, je m'étais déjà orienté dans la direction de l'utilisation du {assign} .

 

Coté product.tpl de cette manière j'obtiens bien mon affichage "l'id parent est : Test"

{assign var="id_parent" value="Test" }
<h2>l'id parent est : {$id_parent}</h2>

Sous cette forme je ne récupère aucun retour de ma fonction getCategBdd() :

{assign var="id_parent" value=Product::getCategBdd($category->id) }
    <h2>l'id parent est : {$id_parent}</h2>
public function getCategBdd($id){
        $result = "";
        $results = "";
        $id_parent = "";
        $level = "";
        $var = "";
        
        $results = Db::getInstance()->ExecuteS('SELECT id_parent, level_depth FROM `'._DB_PREFIX_.'category` WHERE `id_category` = '.$id);
        
        foreach ( $results as $f ){
            
            $id_parent   = $f['id_parent'];
            $level       = $f['level_depth'];
                 
            if($level == 2){
                $result = Db::getInstance()->getValue('SELECT name FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = ' . $id);
                if($result == "ELECTRICITE"){
                    $var = "true";
                } else {
                    $var = "false";
                }
            } else {
                Product::getCategBdd($id_parent);
            }
        }
        return $var;
    }

Mais par contre si à la place de mon return $var qui contient une chaine de caractère, je passe  un return "true" la mon affichage s’exécute correctement.

 

 

Sur la doc smarty {assign} j'ai aussi vu la méthode du assign avec l'utilisation de "getTemplateVars()" est ce qu'il faudrait m'orienter plus vers cette option ?

 

Ou bien est ce que ce problème pourrait survenir de ma fonction récursive qui poserait des problèmes à la réception des données ?

Link to comment
Share on other sites

Merci okom3pom pour ton aide, à force de chercher un peu de mon coté et en mettant en commentaire mon appel de fonction récursive, ma variable arrive sans problème.

 

Du coup j'ai changer mon appel récursif par une boucle While.

public function getCategBdd($id){
        $result = "";
        $results = "";
        $id_parent = $id;
        $level = "";
        $var = "";
        
        $results = Db::getInstance()->ExecuteS('SELECT id_parent, level_depth FROM `'._DB_PREFIX_.'category` WHERE `id_category` = '.$id_parent);
        
        while($level != 3){
            $results = Db::getInstance()->ExecuteS('SELECT id_parent, level_depth FROM `'._DB_PREFIX_.'category` WHERE `id_category` = '.$id_parent);
            
            foreach ( $results as $f ){
                $id_parent   = $f['id_parent'];
                $level       = $f['level_depth'];
            }
        }
        
        $result = Db::getInstance()->getValue('SELECT name FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = ' . $id_parent);
        if($result == "ELECTRICITE"){
            $var = 1;
        } else {
            $var = 0;
        }
        
        return $var;
    }

En utilisant la boucle While je réalise le même traitement de données cependant avec la récupération de ma variable.

 

Je pense au final que ma récursivité devait poser soucis sur les variables qui devait ce chevaucher sans jamais réellement aboutir au résultat attendu (peut être le buffer qui garder tous en mémoire).

 

Pour ma part mon problème a été Résolu.

 

Encore merci et bonne journée

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