6 votes

Rendu d'arbre récursif avec Agile Toolkit

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 !

3voto

jancha Points 3071

Bon, le bon moment était venu et l'add-on approprié a été créé. Pour l'utiliser, mettez à jour vos add ons et votre atk4 et suivez cet article pour savoir comment.

http://www.ambienttech.lv/blog/2012-07-06/tree_view_in_agile_toolkit.html

0voto

Toby Allen Points 6734

Conformément au commentaire de Jancha

ok, après avoir passé un certain temps à chercher les options possibles, j'ai trouvé que la chose la plus simple à faire dans ce cas particulier était d'utiliser l'exemple mentionné ci-dessus. La seule façon de le rendre plus natif serait d'utiliser un modèle externe pour les nœuds et d'utiliser smite et clone region + render pour déplacer le html en dehors du modèle. pour déplacer le html en dehors du modèle. en dehors de cela, l'utilisation de la liste traditionnelle ne semble pas assez efficace. l'utilisation de la liste traditionnelle ne semble pas être assez efficace. et créez un backend approprié ! ce serait cool. merci,j

.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X