Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/06/2014, 20:34
videlxu
 
Fecha de Ingreso: diciembre-2013
Mensajes: 108
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: Paginacion en php

Cita:
Iniciado por Atomycko Ver Mensaje
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!
Si me funciona y ya logre paginarlo esta muy bueno de antemano gracias me hubiera tomado mucho tiempo hacer algo similar, ahora tengo otro problema el cual es que al cargar un div con ajax no me carga el javascript que pesado salgo de uno y entro a otro xD gracias ¡¡¡