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ę!
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
Dodaj rozwiązanie jako odpowiedź poniżej i zaakceptuj je. To oznaczy twoje pytanie jako rozwiązane. Dziękuję Ci! – hakre
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