2011-08-30 10 views
6

Ho una situazione seguente. Ho un modello A con le seguenti proprietà: id int nome varchar (255) parent_id int (riferimenti stesso modello A).Rendering albero ricorsivo con Agile Toolkit

Ora, ho bisogno di rendere Tree View usando quel ModelA. Certo, potrei semplicemente caricare tutti i dati, ordinarli correttamente da parent_id e "renderlo" usando il tradizionale stick-sticking. per esempio.

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

} 

ora, vorrei invece desidera utilizzare atk4 nativo Lister/smlite modello parser per lo scopo. ma, se provi a farlo, ti ritroverai con un cattivo lister, dove nella riga del formato, comunque, proverai a sostituire il tag specifico con l'output di un altro lister che, in effetti, dovresti distruggere per annullare gli overflow della memoria di runtime .

qualche suggerimento?

p.s. codice sopra non è testato, mostra solo il concetto

grazie!

+0

va bene, dopo aver trascorso qualche tempo circa le possibili opzioni, ho scoperto che più facile in questo caso particolare è stato quello di utilizzare sopra citato esempio. l'unico modo per renderlo più nativo sarebbe utilizzare un modello esterno per i nodi e utilizzare la regione di smite e clone + render per spostare html all'esterno del modello. a parte questo, l'uso del lister tradizionale non sembrava abbastanza efficiente. quindi, ragazzi atk4, segui il plug-in di visualizzazione dell'albero delle query e crea il backend appropriato! Sarebbe fico. grazie, j. – jancha

+1

Si prega di aggiungere soluzione come risposta qui sotto e accettarlo. Questo segnerà la tua domanda come risolta. Grazie! – hakre

+0

Non accetterò ciò che ho sopra, perché non è una soluzione. Quando c'è una soluzione integrata adeguata, aggiornerò questa domanda con un aggiornamento appropriato. Finora, si può presumere che non ci sia una soluzione integrata per il problema. – jancha

risposta

0

Come per il commento di Jancha

va bene, dopo aver trascorso qualche tempo a guardare le possibili opzioni, ho trovato che la cosa più facile da fare in questo caso particolare è stato quello di utilizzare sopra citato esempio. L'unico modo per renderlo più nativo sarebbe utilizzare il modello esterno per i nodi e utilizzare la regione di smite e clone + render per spostare l'html all'esterno del modello . a parte questo, l'uso del lister tradizionale non sembrava essere abbastanza efficiente da . quindi, ragazzi atk4, segui il plugin con la struttura ad albero delle query e crea il back-end appropriato! Sarebbe fico. grazie, j

.