Hola Frankiln,
si no veo mal, estás usando mal implode. Cuando hacés:
return '<ul><li class="collapsed"><input name="cat[]" type="checkbox" value=" " >'
. implode('</li> </ul><ul><li class="collapsed"><input name="cat[]" type="checkbox" value="' .
$recursive_items . '" >', $recursive_items) . '</li></ul>';
lo que hace la función es devolver cada elemento del vector usando como saparador un string, pero en este caso, el string es:
'<ul><li class="collapsed"><input name="cat[]" type="checkbox" value=" " >'
. implode('</li> </ul><ul><li class="collapsed"><input name="cat[]" type="checkbox" value="' .
$recursive_items . '" >'
y estás queriendo obtener el ID del item en cuestión de la propia variable $recursive_items
que es el vector con los elementos y no el ID que te está haciendo falta.
Dado que estás armado el vector resultado así:
$recursive_items[] = $parent . $children;
no está el ID como parte de la respuesta de la función.
Una solución podría ser que la función, además de devolver los nombres, devuelva como índice el ID del elemento buscado. Algo así como:
...
for ($i = 0, $j = $structure->count(); $i < $j; $i++) {
$id = $structure[$i]->category_id; // acá el ID, como sea que se invoque
$parent = $structure[$i]->nombre;
$children = $this->print_recursive_tree($structure[$i]->children->find_all());
$recursive_items[$id] = $parent . $children; // acá lo uso como índice el array
}
...
pero con esto no podés usar más implode() porque la función no usa la clave del vector, solo sus valores. La salida tendrías que hacerla iterando el array resultado:
...
$tmp = '<ul><li class="collapsed">';
foreach($recursive_items as $k => $v) {
$tmp .= '<input name="cat[]" type="checkbox" value="'.$k.' " >'.$v.'</li>';
}
$tmp.= '</li></ul>';
Seguramente habrá algo que ajustar en el código para generar la salida (ED no devuelve warnings ni errores de PHP ;-) ) , pero la idea es esa.
También podrías ahorrarte un bucle y además de recuperar los valores, generar los input
, ul
y li
en el bucle que extrae los datos. Por cierto, usá foreach
en lugar de for
siempre que puedas, para no estar limitado a tener índices numéricos correlativos.
Saludos!