2011-08-30 14 views
6

Mam następującą sytuację. Mam model A o następujących właściwościach: id int nazwa varchar (255) parent_id int (odnosi się do tego samego modelu A).Renderowanie drzewa rekurencyjnego z Agile Toolkit

Teraz muszę renderować widok drzewa używając tego ModelA. Oczywiście, mógłbym po prostu załadować wszystkie dane, posortować je odpowiednio przez parent_id i "renderować" za pomocą tradycyjnego sklejania ciągów znaków. na przykład

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)); 
} 

} 

teraz, zamiast tego chciałbym użyć do tego celu parsera szablonów atk4 natywnego lister/smlite. ale jeśli spróbujesz to zrobić, to skończysz na paskudnym listerze, gdzie w wierszu formatu, w każdym razie spróbujesz zastąpić konkretny znacznik wyjściem z innego listera, który w rzeczywistości musiałbyś zniszczyć, aby przepełnić pamięć runtime .

jakieś sugestie?

p.s. Kod powyżej nie jest testowany, tylko pokazuje pojęcie

dziękuję!

+0

porządku, po spędzeniu pewnego czasu na temat możliwych opcji, stwierdziliśmy, że łatwiej w tym konkretnym przypadku było wykorzystanie wyżej przykładu. Jedynym sposobem na uczynienie go bardziej natywnym byłoby użycie zewnętrznych szablonów dla węzłów i użycie smite'a i klonowania regionu + renderowania w celu przeniesienia html poza szablon. poza tym korzystanie z tradycyjnego listingu nie wydaje się wystarczająco wydajne. więc, faceci atk4, kontynuujcie wtyczkę widoku drzewa zapytań i stwórzcie właściwy backend! byłoby fajnie. dzięki, j. – jancha

+1

Dodaj rozwiązanie jako odpowiedź poniżej i zaakceptuj je. To oznaczy twoje pytanie jako rozwiązane. Dziękuję Ci! – hakre

+0

Nie zaakceptuję tego, co mam powyżej, ponieważ nie jest to rozwiązanie. Kiedy pojawi się odpowiednie zintegrowane rozwiązanie, zaktualizuję to pytanie za pomocą właściwej aktualizacji. Do tej pory można założyć, że nie ma wbudowanego rozwiązania problemu. – jancha

Odpowiedz

0

Zgodnie komentarzu Jancha za

porządku, po spędzeniu trochę czasu patrząc na możliwych opcji, stwierdziliśmy, że najłatwiej zrobić w tym konkretnym przypadku było wykorzystanie wyżej przykładu. Jedynym sposobem na uczynienie go bardziej natywnym byłoby użycie zewnętrznego szablonu dla węzłów i użycie obszaru komendy smite i klonowania + renderowanie w celu przeniesienia szablonu HTML poza szablon t. poza tym użycie tradycyjnego listera nie wydaje się być wystarczająco wydajne. więc, atk4 faceci, kontynuujcie z widokiem drzewa zapytań wtyczkę i stwórzcie właściwy backend! byłoby fajnie. dzięki, j

.

Powiązane problemy