Je suis dans la situation suivante. J'ai un modèle A avec les propriétés suivantes : id int nom varchar(255) parent_id int (référence au même modèle A).
Maintenant, je dois rendre le Tree View en utilisant ce ModelA. Bien sûr, je pourrais simplement charger toutes les données, les trier correctement par parent_id et les "rendre" à l'aide d'un collage de chaîne traditionnel, par exemple
class Model_A extends Model_Table {
...
function render_branch($nodes, $parent){
if (!isset($nodes[$parent])){
return null;
}
$out = "<ul>";
foreach ($nodes[$parent] as $node){
$out .= "<li>" . $node["name"];
$out .= $this->render_branch($nodes, $node["id"]);
$out .= "</li>";
}
return $out;
}
function init(){
parent::init();
$nodes = array(); // preload from db and arrange so that key = parent and content is array of childs
$this->template->set("tree", $this->render_branch($nodes, 0));
}
}
Maintenant, j'aimerais plutôt utiliser le listage natif d'atk4 et l'analyseur de modèles smlite. Mais si vous essayez de le faire, vous vous retrouverez avec un listage désagréable, où dans la rangée de format, vous essayerez de toute façon de substituer la balise spécifique avec la sortie d'un autre listage qui, en fait, devra être détruit pour éviter les débordements de mémoire à l'exécution.
Des suggestions ?
p.s. le code ci-dessus n'est pas testé, il montre juste le concept
Merci !