Foros del Web » Programando para Internet » PHP »

duda con function

Estas en el tema de duda con function en el foro de PHP en Foros del Web. hola tengo una funcion que me genera un div cada vez que la llamo la función es la siguiente Código PHP: function  get_mlm_listing () {     global  ...
  #1 (permalink)  
Antiguo 16/05/2013, 08:49
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 8 meses
Puntos: 8
duda con function

hola tengo una funcion que me genera un div cada vez que la llamo
la función es la siguiente

Código PHP:
function get_mlm_listing() {

    global 
$wpdb;
    global 
$current_user;
    if (isset(
$_GET["current_user_id"]) && !empty($_GET["current_user_id"]))
    {
        
$current_user_id $_GET["current_user_id"];
    }
     else 
    {
        
$current_user_id $current_user->ID;
    }
    
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$current_user_id));
    if (
$users == null && $current_user->ID == $current_user_id)
    {
        echo 
"<br />";
        echo 
"No tienes miembros en tu red";
        
//echo "You don't have any members below you yet, here is your referral link: \r
        /*<a href=" . get_bloginfo("url"). "/" . $current_user->ID . ">" . get_bloginfo("url") . '' . "/" . $current_user->ID . "</a><br />";
        */
    
}
     else 
    {        
        foreach (
$users as $obj)
        {
            
$user_count $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM mlm WHERE parent_user_id = %d"$obj->user_id));
            if (
is_plugin_active("buddypress/bp-loader.php"))
            {
                
$user_email $wpdb->get_var($wpdb->prepare("SELECT user_email FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
                
$user_nicename $wpdb->get_var($wpdb->prepare("SELECT user_nicename FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
                
$user_profile trim(str_replace(" """strtolower($obj->login_id)));
                
$url site_url();
                
$wpmlm_contact "<a href='" $url "/members/" $user_nicename "' target='_blank'>[Contacar con el usuario]</a><br> --> <b>".$user_email."</b>";
            }
             else 
            {
                
$user_email $wpdb->get_var($wpdb->prepare("SELECT user_email FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
$wpmlm_contact '' "<a href='mailto:" $user_email "'>[Contact User]</a>";
            }
            
            echo 
"<div style='margin-left:30px; border:solid thin #ccc'><a href='javascript:;' class='L" $current_user_id "' rel='" $obj->user_id "'>" $obj->login_id " (" $user_count ")</a>&nbsp;&nbsp; " $wpmlm_contact "</div>";
            continue;
        }        
    }        
    exit();


entonces me crea una array ($obj) y no puedo poner un contador de total de los registros...

mi pregunta es existe la forma que puede hacer que me recorra la base de datos indefinidamente y me dibuje todos los registros

lo que pasa es que el campo parent_user_id cadavez es diferente, me explico es una tabla de referidos y tiene infinidad de niveles entonce lo que hace ahora es, mira cuantos referidos tengo en mi primer nivel... despues cuando me los lista le pido cuantos referidos tiene mi primer referido y así hasta el final

aqui dejo un esquema

Padre
- Hijo 1
-hijo 1.1
-hijo 1.2
- Hijo 2
-hijo 2.1
-Hijo 3
-hijo 3.1
-hijo 3.2
*hijo 3.2.1
-hijo 3.3


espero haberme explicado
  #2 (permalink)  
Antiguo 16/05/2013, 08:58
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: duda con function

lo que tiene usted es una estructura de árbol, y para recorrer un árbol debe aplicar la técnica de recursión, funciones recursivas, o dicho coloquialmente: que la función se llame a si misma.

investigue sobre el tema.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 16/05/2013, 09:46
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 8 meses
Puntos: 8
Respuesta: duda con function

muchas gracias!!!

ya he encontrado algo y lo voy a poner en practica

insito muchas gracias
  #4 (permalink)  
Antiguo 16/05/2013, 10:09
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 8 meses
Puntos: 8
Respuesta: duda con function

despues de darle varias vueltas no se como transoformar esta funciona en recursiva

si alguien tiene una idea...
  #5 (permalink)  
Antiguo 16/05/2013, 11:57
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: duda con function

es más simple de lo que crees, solo debes de adaptarla un poco, por ejemplo debes de pasar como parámetro el nodo.

lo primero que debe hacer la función con el $nodo pasado es verificar si tiene hijos, si los tiene: recorre los hijos y llama a la misma función pasando al hijo como parámetro en $node.

de esa forma cuando llegues a la hoja, es decir, un $node que NO tenga hijos, no se vuelve a llamar, finalizando allí la función y retornando información a la función que lo llamo su parent_node (padre).
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #6 (permalink)  
Antiguo 16/05/2013, 18:29
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 8 meses
Puntos: 8
Respuesta: duda con function

ok muchas gracias mirare de cómo hacerlos, pero si alguien pone un ejemplo se agradece...

igualmente muchas gracias
  #7 (permalink)  
Antiguo 16/05/2013, 20:32
Avatar de engonga
Usuario no validado
 
Fecha de Ingreso: marzo-2002
Ubicación: Buenos Aires
Mensajes: 1.300
Antigüedad: 22 años, 8 meses
Puntos: 8
Respuesta: duda con function

al final lo conseguí

Código PHP:

function get_mlm_listing() {
    
    
    global 
$wpdb;
    global 
$current_user;
    if (isset(
$_GET["current_user_id"]) && !empty($_GET["current_user_id"]))
    {
        
$current_user_id $_GET["current_user_id"];
    }
    else 
    {
        
$current_user_id $current_user->ID;
    }
    
    
    
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$current_user_id));
    
    
    if (
$users == null && $current_user->ID == $current_user_id)
    {
        echo 
"<br />";
        echo 
"No tienes miembros en tu red";
        
//echo "You don't have any members below you yet, here is your referral link: \r
        /*<a href=" . get_bloginfo("url"). "/" . $current_user->ID . ">" . get_bloginfo("url") . '' . "/" . $current_user->ID . "</a><br />";
         */
    
}
    else 
    {
                
        function 
dependientes($nivel) {
            
            global 
$wpdb;
            
            
// Iniciamos la creación de la lista
            
$lista '<ul style="border:#000 solid thin; margin-left:30px;">';
            
            
// Obtenemos los datos los dependientes del nivel solicitado
            
            
$users $wpdb->get_results($wpdb->prepare("SELECT * FROM mlm WHERE parent_user_id = %d"$nivel));
            
//$sql = sprintf("SELECT id, nombre, jefe FROM funcionario WHERE jefe = %s", $nivel);
            

            
            //$q = mysql_query($sql);
            
            // Para cada dependiente del nivel solicitado...
            
global $contadorArray;
            
            
$contadorArray 0;
            
            
//while ($r = count($usersA))  {
            
foreach ($users as $obj){
            
                
$user_email $wpdb->get_var($wpdb->prepare("SELECT user_email FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
$user_nicename $wpdb->get_var($wpdb->prepare("SELECT user_nicename FROM " $wpdb->prefix "users WHERE ID = %d"$obj->user_id));
                
$user_profile trim(str_replace(" """strtolower($obj->login_id)));
                
$url site_url();
                
                
                
// Abrimos el nodo con el nombre del primer dependiente
                
$lista .= '<li style="border:#0f0 solid thin;">' $user_nicename;
                
                
// Utilizaremos esta variable para ver si seguimos consultado la BDD
                
$tiene_dependientes null;
                
//$sql = sprintf("SELECT COUNT(jefe) FROM funcionario WHERE jefe = %s", $r['jefe']);
                //Corregido
                
                
$user_count $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM mlm WHERE parent_user_id = %d"$obj->user_id));
                
//$sql = sprintf("SELECT COUNT(jefe) FROM funcionario WHERE jefe = %s", $r['id']);
                
$tiene_dependientes $user_count;
                
                
// Si tiene dependientes, ejecutamos recursivamente
                // tomando como parámetro el nuevo nivel
                
if ($tiene_dependientes) {
                    
// Eliminado: $lista .= get_categories($r['jefe']);
                    //$lista .= dependientes($r['jefe']);
                    //Corregido
                    
$lista .= dependientes($obj->user_id);
                }
                
                
// Cerramos el nodo
                
$lista .= '</li>';
                
$contadorArray++;
            }
            
                        
            
// Cerramos la lista
            
$lista .= '</ul>';
            return 
$lista;
            
    
        }
        
        echo 
dependientes($current_user_id);
        echo  
"<br><br>el total de tu lista es " .$contadorArray
        
        
    }


pero el $contadorArray me devuelve 0 y me tendría que devolver el total de nodos... y ya no se como sacarlo :(

Etiquetas: function, registro, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:52.