Ver Mensaje Individual
  #7 (permalink)  
Antiguo 31/05/2014, 18:02
Avatar de Atomycko
Atomycko
 
Fecha de Ingreso: diciembre-2005
Ubicación: Zapopan Jal.
Mensajes: 92
Antigüedad: 19 años, 2 meses
Puntos: 12
Respuesta: Paginacion en php

Cita:
Iniciado por videlxu Ver Mensaje
Asu men con el codigo que me has pasado sigo con el mismo problema = a la funcion que tengo , no se puede paginar una funcion, desde la bd no lo intento porque me parece que sera el mismo resultado , solo dime que tengo que tomar para poder hacer la paginacion ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ porfa ¡¡¡
Bueno videlxu como te comentaba, realice esta funcion con un proposito diferente, el cual es categorizar un array y poder exponerlo en modo arbol, y por lo que mencionas de sistema de comentarios padre hijo crei que podria servirte.

La funcion solo requiere que le pases el arreglo bidimensional el cual deve tener 2 campos especificos, el que lo identifica y el que identifica a su padre, algo asi como:

Código PHP:
<?php
$arreglo 
= array(
    
=> array(
        
'id' => 1// campo identificador
        
'padre' => 0// campo identificador del padre
        
'autor' => 'Josefino',
        
'mensaje' => 'Mensaje...',
        
'fecha' => 1548964523 // valor unix (yo asi manejo las fechas, no se como lo haras tu)
    
),
    
=> array(
        
'id' => 2,
        
'padre' => 0,
        
'autor' => 'Gracielo',
        
'mensaje' => 'Mensaje...',
        
'fecha' => 1548984523
    
),
    
=> array(
        
'id' => 3,
        
'padre' => 0,
        
'autor' => 'Rogelia',
        
'mensaje' => 'Mensaje...',
        
'fecha' => 1548988523
    
),
    
=> array( // respuesta a mensaje 'id' => 2
        
'id' => 4,
        
'padre' => 2,
        
'autor' => 'Cacheton',
        
'mensaje' => 'Respuesta...',
        
'fecha' => 1548988623
    
),
    
=> array(
        
'id' => 5,
        
'padre' => 0,
        
'autor' => 'Caliman',
        
'mensaje' => 'mensaje...',
        
'fecha' => 1548988723
    
),
    
=> array( // respuesta a respuesta 'id' => 3
        
'id' => 6,
        
'padre' => 4,
        
'autor' => 'Caliman',
        
'mensaje' => 'Respuesta...',
        
'fecha' => 1548988823
    
)
);
?>
Al pasar el arreglo por la funcion, lo modifica ordenadolo para mostrarlo en modo arbol, y segun el campo especificado para ordenar, ademas los indices son reemplazados por el identificador de fila:

Código PHP:
<?php
categorize
(
    
$arreglo,
    
'fecha'// campo a ordenar
    
SORT_ASC// el modo a ordenar
    
'id'// nombre del campo identificador de fila
    
'padre' // nombre del campo identificador de fila padre
);
?>
El nuevo arreglo quedaria asi:

Código HTML:
Array
(
    [1] => Array
        (
            [id] => 1
            [padre] => 0
            [autor] => Josefino
            [mensaje] => Mensaje...
            [fecha] => 1548964523
            [__HIJOS__] => 0
            [__NIVEL__] => 0
            [__LUGAR__] => 1
        )

    [2] => Array
        (
            [id] => 2
            [padre] => 0
            [autor] => Gracielo
            [mensaje] => Mensaje...
            [fecha] => 1548984523
            [__HIJOS__] => 1
            [__NIVEL__] => 0
            [__LUGAR__] => 2
        )

    [4] => Array
        (
            [id] => 4
            [padre] => 2
            [autor] => Cacheton
            [mensaje] => Respuesta...
            [fecha] => 1548988623
            [__HIJOS__] => 1
            [__NIVEL__] => 1
            [__LUGAR__] => 0
        )

    [6] => Array
        (
            [id] => 6
            [padre] => 4
            [autor] => Caliman
            [mensaje] => Respuesta...
            [fecha] => 1548988823
            [__HIJOS__] => 0
            [__NIVEL__] => 2
            [__LUGAR__] => 0
        )

    [3] => Array
        (
            [id] => 3
            [padre] => 0
            [autor] => Rogelia
            [mensaje] => Mensaje...
            [fecha] => 1548988523
            [__HIJOS__] => 0
            [__NIVEL__] => 0
            [__LUGAR__] => 2
        )

    [5] => Array
        (
            [id] => 5
            [padre] => 0
            [autor] => Caliman
            [mensaje] => mensaje...
            [fecha] => 1548988723
            [__HIJOS__] => 0
            [__NIVEL__] => 0
            [__LUGAR__] => 3
        )

)
Ahora, para paginar un hijo como lo mencionas, tengo otra funcion la cual retorna un array con la descendencia de una fila, esta se deve llamar despues de categorize():

Código PHP:
<?php
/**
 * El parametro $id_fila de la cual se obtendra la descendencia
 * El parametro $todos para obtener no solo los hijos, tambien nietos, bistnietos, etc.
 */
function categorize_getChildren($arreglo$id_fila$todos false$campo_id 'id'$campo_padre 'padre'){
    
$colector = array();

    
// verificar que el arreglo sea valido y que la $id_fila y campos id y padre existan
    
if(!is_array($arreglo) ||
        
count($arreglo) ||
        !
array_key_exists($id_fila$arreglo) ||
        !
is_array($arreglo[$id_fila]) ||
        !
array_key_exists($campo_id$arreglo[$id_fila]) ||
        !
array_key_exists($campo_padre$arreglo[$id_fila])
    ){
        return 
$colector;
    }

    
// la funcion-variable que hace el trabajo
    
$buscar_hijos = function(&$colector$arreglo$id_fila$campo_id$campo_padre$buscar_hijos$todos false){
        foreach(
$arreglo as $indice => $fila){
            if(
$fila[$campo_padre] == $id_fila){
                
$colector[$fila[$campo_id]] = $fila;
                unset(
$arreglo[$indice]);
                if(
$todos){
                    
$buscar_hijos($colector$arreglo$fila[$campo_id], $campo_id$campo_padre$buscar_hijostrue);
                }
            }
        }
        unset(
$indice$fila);
    };
    
$buscar_hijos($colector$arreglo$id_fila$campo_id$campo_padre$buscar_hijos$todos);

    return 
$colector;
}
?>
Modo de uso:

Código PHP:
<?php
$hijos 
categorize_getChildren(
    
$arreglo,
    
2// id de fila de la cual se obtendra la descendencia
    
true// para obtener hijos, nietos, etc.
    
'id'// nombre del campo identificador de fila
    
'padre' // nombre del campo identificador de fila padre
);
?>
El resultado seria:

Código HTML:
Array
(
    [4] => Array
        (
            [id] => 4
            [padre] => 2
            [autor] => Cacheton
            [mensaje] => Respuesta...
            [fecha] => 1548988623
            [__HIJOS__] => 1
            [__NIVEL__] => 1
            [__LUGAR__] => 0
        )

    [6] => Array
        (
            [id] => 6
            [padre] => 4
            [autor] => Caliman
            [mensaje] => Respuesta...
            [fecha] => 1548988823
            [__HIJOS__] => 0
            [__NIVEL__] => 2
            [__LUGAR__] => 0
        )

)
Bueno espero esto te funcione.

Saludos!
__________________
PD: Los acentos fueron secuestrados.