2011-08-30 8 views
6

Tengo una situación siguiente. Tengo un modelo A con las siguientes propiedades: id int nombre varchar (255) parent_id int (hace referencia al mismo modelo A).Representación recursiva de árboles con Agile Toolkit

Ahora, necesito renderizar la Vista de árbol usando ese ModeloA. Por supuesto, podría simplemente cargar todos los datos, ordenarlos correctamente por parent_id y "renderizarlos" usando la cadena tradicional pegada. p.ej.

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

} 

ahora, me gustaría usar en lugar atk4 Lister/analizador de plantilla smlite nativo para el propósito. pero, si intentas hacer eso, terminarías con lister desagradable, donde en la fila de formato, intentarías de todos modos sustituir la etiqueta específica con la salida de otro lister que, de hecho, tendrías que destruir para anular los desbordamientos de memoria del tiempo de ejecución .

alguna sugerencia?

p.s. código anterior no se prueba, simplemente muestra el concepto

gracias!

+0

bien, después de pasar algún tiempo acerca de posibles opciones, he encontrado que más fácil en este caso en particular era utilizar el ejemplo anterior mencionado. La única manera de hacerlo más nativo sería usar una plantilla externa para nodos y usar smite y clonar región + renderizar para mover html fuera de la plantilla. aparte de eso, el uso de Lister tradicional no parecía ser lo suficientemente eficiente. así que, atk4 chicos, hagan un seguimiento con el complemento de vista de árbol de consulta y creen el backend adecuado. seria genial. gracias, j. – jancha

+1

Agregue su solución como respuesta a continuación y acéptela. Esto marcará su pregunta como resuelta. ¡Gracias! – hakre

+0

No aceptaré lo que tengo arriba, porque no es una solución. Cuando hay una solución integrada adecuada, actualizaré esta pregunta con la actualización adecuada. Hasta ahora, se puede suponer que no hay una solución integrada para el problema. – jancha

Respuesta

0

De acuerdo con el comentario de Jancha

bien, después de pasar algún tiempo buscando en las opciones posibles, he encontrado que la cosa más fácil de hacer en este caso particular era utilizar el ejemplo anterior mencionado. La única forma de hacerlo más nativo sería usar una plantilla externa para los nodos y usar el comando herir y clonar región + renderizar para mover html fuera de la plantilla o . aparte de eso, el uso de Lister tradicional no parecía ser ser lo suficientemente eficiente. así que, atk4 chicos, seguid con el árbol de consulta consulta el plugin y crea un back-end adecuado! seria genial. gracias, j

.