Bon alors j'ai fouillé le net et mixé plusieurs solutions. Je touche au but
Voici les deux fonctions que j'ai créé.
La première va mettre en forme le array que je récupère de la base de données, et la deuxième est censée (je dis bien censée) afficher mes listes avec leur hiérarchie (mais ne fonctionne pas en fait)
Ici je formate les infos qui viennent de la base
function makeArray(&$list, $parent = 0) {
// prend comme argument un array
$result = array();
for ($i = 0, $c = count($list); $i < $c; $i++) {
if ($list$i]->c_parent_category_id == $parent) {
$list$i]->c_childs = $this->makeArray($list, $list$i]->c_id);
$result] = $list$i];
}
}
return $result;
}
ici j'essaie de mettre en forme
function printArray(&$list, $parent = 0) {
echo '<ul>';
for ($i = 0, $c = count($list); $i < $c; $i++) {
if ($list$i]->c_parent_category_id == $parent && $list$i]->c_parent_category_id != NULL) {
echo '<li>' . $list$i]->c_name;
if (!empty($list$i]->c_childs)) {
debug(((int)$list$i]->c_id));
//$this->printArray($list,$list$i]->c_id);
}
echo '</li>';
}
}
echo '</ul>';
}
Et ça c'est ce que j'ai collé dans ma vue
$getCat = $this->request("Categories", "getParentCategory");
//debug($getCat);
$makeArray = $this->request('Categories', 'makeArray', $getCat);
debug($makeArray);
$printArray = $this->request('Categories', 'printArray', $makeArray);
Malheureusement, cela ne génère même pas le premier sous niveau.
Voici pour exemple le tableau généré
Array
(
[0] => stdClass Object
(
[c_id] => 1
[c_name] => Revêtements sols
[c_parent_category_id] => 0
[c_childs] => Array
(
[0] => stdClass Object
(
[c_id] => 2
[c_name] => Carrelage
[c_parent_category_id] => 1
[c_childs] => Array
(
[0] => stdClass Object
(
[c_id] => 3
[c_name] => Parquet
[c_parent_category_id] => 2
[c_childs] => Array
(
)
)
)
)
)
)
[1] => stdClass Object
(
[c_id] => 4
[c_name] => Menuiserie
[c_parent_category_id] => 0
[c_childs] => Array
(
[0] => stdClass Object
(
[c_id] => 6
[c_name] => Intérieure
[c_parent_category_id] => 4
[c_childs] => Array
(
)
)
)
)
[2] => stdClass Object
(
[c_id] => 5
[c_name] => Porte
[c_parent_category_id] => 0
[c_childs] => Array
(
)
)
[3] => stdClass Object
(
[c_id] => 10
[c_name] => Platrerie et isolation
[c_parent_category_id] => 0
[c_childs] => Array
(
)
)
[4] => stdClass Object
(
[c_id] => 11
[c_name] =>
[c_parent_category_id] =>
[c_childs] => Array
(
)
)
)
Le fonction recurrente ne veut rien savoir !!
Si j'arrive à la faire fonctionner, cela va m'aider pour créer dynamiquement mes menus et gérer toutes les class en fonction, mais également faire mes listes de catégories de produit en toute simplicité.
Merci à tous pour votre aide !
Fabien