recursividad en codeigniter!,,,

Iniciado por 01munrra, 17 Abril 2012, 05:50 AM

0 Miembros y 1 Visitante están viendo este tema.

01munrra

saludos!,,, tienen alguna idea de como hacer una funcion recursiva en CI ??? 

Kase

claro.. la llamas a si misma... o__o



EFEX

En donde queres aplicarlo? muestra el codigo.
GITHUB 

01munrra

EFEX , yo habia hecho esto en php puro.

esta funcion me recorre la misma tabla y me muestra los hijos de cada padre.

Código (php) [Seleccionar]

function recursive($pariente)
{
   $sql = mysql_query("SELECT * FROM Familia WHERE IdPadre = '$pariente' ") or die(mysql_error());
   while( $Hijo = mysql_fetch_array($sql) )
    {
      echo "" .$Hijo['nombre']. "<br>";
         recursive_hijos($Hijo['Id']); 
    }
}


ahora la quiero hacer pero usando Codeigniter, y pues para ser sincero ,e enriedo puesto que ahora tengo aparte el modelo(donde tengo que modelar la consulta a la base de datos),  la vista(donde voy a controlar las vistas) y el controlador, he aqui donde tengo que hacer una funcion que me recorra la tabla de manera recirsiva.

EFEX

Estas empezando con CI verdad? Si tenes claro el patron MVC, lo cachas enseguida, podes leer la documentacion oficial en el sitio.

CodeIgniter User Guide Version 2.1.0
http://codeigniter.com/user_guide/

Este es un ejemplo, lo hice 'a mano alzada' y es para que veas como es el patron Modelo-Vista-Controlador, el codigo esta mal por lo que te aconsejo no probarlo :), si me equiboque en algo y me corrigen mejor.
El modelo esta encargado de hacer peticiones a la base de datos(insert, update, select, etc).

.../models/base.php
Código (php) [Seleccionar]

class Base_model extends CI_Model { //Al definir una clase la primera letra siempre tiene que ser mayuscula
function __construct()
{
//Llamar al contructor del modelo
parent::__construct();
}
public function consulta($pariente)
{
//Preparamos la consulta
$this->db->get_where('Familia', array('IdPadre' => $pariente));
//Generamos la consulta
$query = $this->db->get();
//Devolvemos el resultado
return $query->result();
}
}


Las vistas puede ser un pedazo del sitio web, como el header, footer, vista de un carrito de compras, etc.
No son llamadas directamente y se cargan en el controlador. El codigo php esta embebido dentro de la vista, por que estará nuestro codigo html, js, css y no hay clases ni funciones de php.

.../views/familia.php
Código (php) [Seleccionar]

<?php echo $nombreHijo?>


El controlador es la base de tu aplicación, es una clase que tiene una asociación con la url del sitio.
Citarejemplo.com/index.php/nombre-del-controlador/funcion

.../controllers/casa.php
Código (php) [Seleccionar]

class Casa extends CI_Controller {
public function recursive($pariente){ //Esta funcion va ser poder accedida desde ejemplo.com/index.php/casa/recursive
$this->load->model('Base', 'db'); //Cargamos el modelo
$respuesta = $this->db->consulta($pariente); //Genera la consulta
//Es solo un ejemplo, hay que pensar desde aqui :)
while($respuesta)
{
//Definimos lo que pasaremos a nuestra vista, nota que la clave 'nombreHijo' del array $datos esta asociado a la variable $nombreHijo de la vista familia.
$datos['nombreHijo'] = $respuesta;
//Cargamos la vista y mostramos
$this->load->view('familia', $data);
}
}
}



GITHUB 

01munrra

si hasta hora estoy empezando a usar codeigniter, y se me dificulta un poco....... gracias por la explicacion, me daste un empujon, de donde empezar.... voy a tomar en cuenta tus explicaciones, cualquier cosa te estare comentando....

01munrra

EFEX, estoy en el modelado(models) haciendo algo parecido a esto:

Código (php) [Seleccionar]


public function traer($id_pariente)
{
   // procedimientos
   traer($id);
}



y me muestra esto:

Código (php) [Seleccionar]
Fatal error: Call to undefined function traer()   

y por su puesto señala la linea donde estoy llamando la funcion, y no entiendo por que no me reconoce la funcion, pusto que esta en la misma clase y pues si ves lo que esta hacien es llamandose a si misma con un nuevo parametro...

la manera de llamar funciones en php es esa, cierto?
pero entonces en codeigniter usa otra forma de llamar las funciones??..

Kyke-28

Se Nota que no haz programado POO( Programación Orientado a Objetos )
Código (php) [Seleccionar]

public function traer($id_pariente)
{
   // procedimientos
   traer($id);
}


es así:

Código (php) [Seleccionar]
public function traer($id_pariente)
{
   // procedimientos
   $this-> traer($id);
}


Aprende primero POO, ya te daras una idea con Codeigniter ya que se base mucho POO.

Saludos.

01munrra

Kyke-28, si he trabajado con POO, mi primer lenguaje en aprender a programar fue C++, use POO como no te imaginas,,,,, ahora con respecto a CI,  pregunto es por que no conozco muy bien su sintaxi de programacion,,, hasta hora estoy aprendiendo a programar en CI.

gracias por la info...

saludos!!