Recurro a pedir ayuda por internet ya que llevo unos días atrancado en un problema y no consigo dar con la tecla.
Como indico en el título, estoy intentando crear una tabla a partir de un arbol de categorías, pero a la hora de hacer el algoritmo que construya la tabla no doy con la solución.
Código PHP:
Ver original
/* * Construye el array de categorias en forma de arbol * */ $raw = $DB->get_records('question_categories', array('parent' => 0, 'contextid' => $this->context->id),'sortorder ASC'); foreach ($raw as $i){ 'id'=>$i->id, 'nombre'=>$i->name, 'parent'=>$i->parent, 'nsubcat'=> $DB->count_records('question_categories', array('parent' => $i->id, 'contextid' => $this->context->id)), if ($this->categoriasArbol[$i->id]['nsubcat']>0) { $this->categoriasArbol[$i->id]['subcat'] = $this->lee_subcategorias($i->id); } }
Código PHP:
Ver original
private function lee_subcategorias($id) { global $DB; $raw = $DB->get_records('question_categories', array('parent' => $id, 'contextid' => $this->context->id), 'sortorder ASC'); foreach ($raw as $i){ 'id'=>$i->id, 'nombre'=>$i->name, 'parent'=>$i->parent, 'nsubcat'=> $DB->count_records('question_categories', array('parent' => $i->id, 'contextid' => $this->context->id)), if ($temp[$i->id]['nsubcat']>0) { $temp[$i->id]['subcat'] = $this->lee_subcategorias($i->id); } } return $temp;
Con esto construyo el arbol de categorías.
Lo siguiente es crear las celdas, empezando por el padre y recorriendo todos los hijos.
Código PHP:
Ver original
private function creaCeldasCategorias($cat) { $celda = new html_table_cell(); $celda->idcat = $cat['id']; $celda->parent = $cat['parent']; $celda->rowspan = $this->calculaRowspan($cat); $celda->text = $cat['nombre']; $celda->nsubcat = $cat['nsubcat']; if ($cat['nsubcat']>0) { foreach ($cat['subcat'] as $c) { $celda->subcat[] = $this->creaCeldasCategorias($c); } } return $celda; } private function calculaRowspan($cat) { $n=0; if ($cat['nsubcat']==0) { return 1; } else { foreach ($cat['subcat'] as $c) { $n += $this->calculaRowspan($c); } } return $n; } $celdasCat = $this->creaCeldasCategorias($this->categoriasArbol[126]);
Con esto tengo ya un array de objetos html_table_cell. Lo siguiente es donde tengo el problema, y es a la hora de recorrer el arbol y meter cada celda en la fila que le corresponda.
Un ejemplo de una rama de categorias seria esto
Código HTML:
Ver original
Llevo dándole vueltas y par de días, he intentado hacerlo tanto recursivo como iterativo pero no lo consigo. A ver si alguien puede echarme un cable.
Gracias.