entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

mostrar id arbol recursivo

Hola a todos
tengo un problema .. lo logro obtener el id ....type="checkbox" value=" ",

thanks all!!
...model

public function print_recursive_tree($structure) {
if ($structure->count() > 0) {
$recursive_items = array();
for ($i = 0, $j = $structure->count(); $i < $j; $i++) {
$parent = $structure[$i]->nombre;
$children = $this->print_recursive_tree($structure[$i]->children->find_all());
$recursive_items[] = $parent . $children;
}
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>';
  }
 return '';
 }

....controller

$structure = ORM::factory('categorias') ->where('category_id', '=', 0) ->find_all(); $recursive_list_tree = ORM::factory('categorias')->print_recursive_tree($structure);

...view

<?php echo $recursive_list_tree; ?>

http://i.imgur.com/0PvPIcp.png

type="checkbox" value=" "

1voto

carlossevi comentado

Hola franklyn77, no sé el resto pero yo no consigo entender qué es lo que estás preguntando. ¿Qué es lo que quieres obtener? ¿Qué es lo que estás obtenido actualmente?

Preguntas por el id pero en el html que se genera yo no veo que ningún elemento tenga id definido.

2votos

franklyn77 comentado

Hola carlossevi,
ahora estoy obteniendo las descripciones de la tabla categorias http://prntscr.com/2txt9j
el lio es obtener el id de la tabla categorias ... posteiormente hacer un filtrado
salu2

1voto

carlossevi comentado

En el controlador veo que coges todas las categorías que tienen category_id = 0 y partir de ahí le pasas la lista al modelo a través de la función print_recursive_tree. Esa función recorre los hijos y genera una cadena de html que se va acumulando recursivamente.

¿Con categoría te refieres al campo category_id? ¿Dónde quieres utilizarlo? Es que no veo que aparezca en ningún sitio.

De las categorías sólo estás cogiendo el nombre y los hijos:

$structure[$i]->nombre
$structure[$i]->children->find_all()

1voto

franklyn77 comentado

¿Con categoría te refieres al campo category_id?

  • si , el campo id de la tbl categorias
    ¿Dónde quieres utilizarlo?
  • < input id="" type="checkbox" value=" [AQUI]" name="">
    ...para posteiormente coger esos valores de los checks y hacer un filtrado por categorias
    C:

2 Respuestas

4votos

Leonardo-Tadei Puntos227320

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!

1voto

carlossevi comentado

+1 ¡Perfecta explicación!

1voto

Leonardo-Tadei comentado

Gracias Carlos! Viniendo de Ud, es un lindo cumplido!

1voto

franklyn77 Puntos880

Hola leonardo-tadei
tambien encontre otra solucion al problema que da el mismo resultado ,lo posteo por aca
http://yadi.sk/d/Nbh1KlaOJGiSN
me salia un error cuando ponia los codigos en respuesta asi que opte por subirlo como file y compartir el link
...
carlossevi, leonardo-tadei thanks
Salu2!

1voto

Peter comentado

Por favor marca la respuesta que da la solución como correcta.

Gracias.

1voto

franklyn77 comentado

Hola peter si hay 2 respuestas correctas?
gracias

1voto

Peter comentado

La que se publicó primero :)

El que contesta antes correctamente es el que merece ser seleccionado.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta