Foros del Web » Programando para Internet » PHP »

Paginacion con foreach

Estas en el tema de Paginacion con foreach en el foro de PHP en Foros del Web. Hola me gustaria saber si hay la posibilidad de hacer una paginacion en php con foreach Código PHP: foreach( $comments  as  $a )     {   ...
  #1 (permalink)  
Antiguo 14/03/2014, 11:30
 
Fecha de Ingreso: diciembre-2013
Mensajes: 108
Antigüedad: 10 años, 11 meses
Puntos: 1
Paginacion con foreach

Hola me gustaria saber si hay la posibilidad de hacer una paginacion en php con foreach

Código PHP:
foreach($comments as $a)
    {
 
showComment($a);

    } 
Código PHP:
 showComment($a); 
es el resultado que deseo paginar de 10 en 10.
  #2 (permalink)  
Antiguo 14/03/2014, 11:43
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Paginacion con foreach

Cualquier bucle te puede servir, aunque depende del origen de los datos, cuál se adapta mejor.
  #3 (permalink)  
Antiguo 14/03/2014, 12:03
 
Fecha de Ingreso: diciembre-2013
Mensajes: 108
Antigüedad: 10 años, 11 meses
Puntos: 1
Respuesta: Paginacion con foreach

Cita:
Iniciado por ocp001a Ver Mensaje
Cualquier bucle te puede servir, aunque depende del origen de los datos, cuál se adapta mejor.
Código PHP:
showComment($a); 
una funcion showComment y $a un array o me equivoco???, no se como hacer una paginacion con una funcion

Código PHP:
showComment($a); 
  #4 (permalink)  
Antiguo 14/03/2014, 12:51
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Paginacion con foreach

Desconozco si $a en tu script es un arreglo o no, y tampoco sé que hace la función showComment, por lo que te sugiero indiques cómo obtienes los datos y qué quieres tener como salida, con el código que lleves.
  #5 (permalink)  
Antiguo 14/03/2014, 14:54
 
Fecha de Ingreso: diciembre-2013
Mensajes: 108
Antigüedad: 10 años, 11 meses
Puntos: 1
Pregunta Respuesta: Paginacion con foreach

Cita:
Iniciado por ocp001a Ver Mensaje
Desconozco si $a en tu script es un arreglo o no, y tampoco sé que hace la función showComment, por lo que te sugiero indiques cómo obtienes los datos y qué quieres tener como salida, con el código que lleves.
Tienes razón, para comenzar es un sistema de comentarios, ocea se puede comentar y a la ves poner una replica ocea seria asi:

COMENTARIO(PADRE)
------------------------------------------------
COMENTARIO(HIJO)
---------------------------------------------------

la idea es hacer la paginacion agrupando tanto al padre y al hijo para que asi si hay 20 replicas no lo cuente como un registro , intente hacerlo desde la consulta poniendo limit $variable $variable me sale normal pero no como quiero porque tambien me cuenta los registros (HIJO) ocea si pongo un limite de 10 entonces si hay 10 comentarios pero en varios de esos hay replicas las replicas se pierden por eso la idea es paginarlo desde el mismo foreach, muchas gracias espero me ayudes.

Código PHP:
<?php
function showComment($arr)
{
      
date_default_timezone_set("America/Lima");

$hace = new tiempoTrasncurrido($arr['post_date'],'s');
if (isset(
$_SESSION['signed_in']))
{


$comments_resultadou mysql_query("SELECT  *
                    FROM
                        users
                    WHERE user_id = "
.$_SESSION['user_id']."");
                    

while(
$rowu=mysql_fetch_assoc($comments_resultadou)){
    
    
$user_id $rowu['user_id'];
    
$user_name $rowu['user_name'];
    
$user_foto $rowu['user_foto'];

}
}




    
$sql "SELECT
            topic_id,
            topic_subject,
            topic_cat,
            topic_by,
            media,
            total_estrellas,
            votos
        FROM
            topics
        WHERE
            topics.topic_id = " 
mysql_real_escape_string($_GET['id']);
            
$result mysql_query($sql);
while(
$rowtop mysql_fetch_assoc($result))
        {
        
            
$topic_cat $rowtop['topic_cat'];
            
$topic_id $rowtop['topic_id'];
            
$topic_by $rowtop['topic_by'];
        
        
$num=mysql_query("SELECT * FROM posts WHERE post_topic = '".$topic_id."' ")or die(mysql_error()); 
        
$numeromsj=mysql_num_rows($num); 
        
$totmsj $numeromsj 1;
            
                echo  
'<div class="waveComment com-'.$arr['post_id'].'">';
                if(
$arr['post_by'] != $topic_by  || $arr['cat_post'] == '0'){
                echo  
'<div class="comment">';
                }else{
                    echo 
'<div class="commentespecial">';
                }
                
?> 
                <?php
                
if($arr['cat_post'] !=){
                echo 
'<div class="commentAvatar">
                <img src="imagen/user/'
.$arr['user_foto'].'" class="user_comment" alt="'.$arr['usr'].'" />
                </div>
                
                <div class="commentText">
                <span class="name">@<a href="perfil.php?id='
.$arr['user_id'].'">'.$arr['usr'].'</a>&nbsp;&nbsp;</span><span class="time">Hace '.$hace.'</span>';
                if (isset(
$_SESSION['signed_in']))
{
                echo 
'<span class="menuboton"><div class="replyLink"><a class="classname2" ><img src="imagen/icono/denunciar.png" /></a></div><div class="replyLink"><a class="classname"><img src="imagen/icono/eliminar.png" /></a></div><div class="replyLink"><a class="classname"><img src="imagen/icono/bloquear.png" /></a></div><div class="replyLink">';
                
                if (
$arr['parent']==0){
                echo 
'<a href="javascript:void(0);" class="classname" onClick="addComment(this,\''.$arr['post_id'].'\',\''.$user_id.'\',\''.$user_name.'\',\''.$user_foto.'\',\''.$topic_id.'\',\''.$topic_cat.'\');area(\'ta\');return false;"><img src="imagen/icono/responder.png" /></a>';
                }else{
                echo 
'<a href="javascript:void(0);" class="classname" onClick="addCommentar(this,\''.$arr['parent'].'\',\''.$user_id.'\',\''.$user_name.'\',\''.$user_foto.'\',\''.$topic_id.'\',\''.$topic_cat.'\');usuario(\''.$arr['user_name'].'\',\'ta\');return false;"><img src="imagen/icono/responder.png" /></a>';    
                }
                
                echo 
'</div><div class="replyLink"><a class="classname"><img src="imagen/icono/manitoabajo.png" /></a></div><div class="replyLink"><a class="classname3"><img src="imagen/icono/manitoarriba.png" /></a></div></span>';
}
                echo 
'<br><br><span id="contenido" >';
                
                echo 
bbcode($arr['post_content']);
                            echo 
'</span></div>';
                
?>
                
                <?php 
                
}else{
            
$a_men=mysql_query("SELECT * FROM posts WHERE post_topic = '".$topic_id."' AND parent = 0 ")or die(mysql_error()); 
        
$numero_men=mysql_num_rows($a_men); 
        
                    if(
$numero_men <= 1){
                    echo 
'<div class="totalmsj" ><div id="capa">No hay Comentarios.</div></div>';
                    }else{
                    
                    
$totalmsj $numero_men-1;

                            echo 
'<div class="totalmsj" ><div id="capa"><strong class="totalmsj">'.$totalmsj.' comentarios</strong></div></div>';
                        }
                }
                
?>
                
                <?php 
                
echo '<div class="clear"></div></div>';
                
                
    }
    
    
    
// Output the comment, and its replies, if any
    
    
if(isset($arr['replies']))
    {
        foreach(
$arr['replies'] as $r)
            
showComment($r);
    }
    
    echo 
'</div>';
}



$comments_result mysql_query("SELECT  posts.post_id,
                posts.post_content,
                posts.post_date,
                users.user_id,
                users.user_name,
                users.foto_level,
                users.user_ciudad,
                users.user_foto,
                users.foto_firma,
                users.user_date,
                users.user_level,
                posts.cat_post,
                posts.post_by,
                posts.parent,
                posts.usr
                
                
                
                    FROM
                        posts
                    LEFT JOIN
                        users
                    ON
                        posts.post_by = users.user_id
                    LEFT JOIN
                        categories
                    ON
                        posts.cat_post = categories.cat_id                        
                    WHERE
                        posts.post_topic = " 
mysql_real_escape_string($_GET['id'])."  ORDER BY post_id");
// Selecting all the comments ordered by id in ascending order


$comments=array();

$js_history='';

while(
$row=mysql_fetch_assoc($comments_result))
{
    if(
$row['parent']==0){
        
// If the comment is not a reply to a previous comment, put it into $comments directly
        
$comments[$row['post_id']] = $row;
    }
    else
    {
        if(!isset(
$comments[$row['parent']])) continue;
        
        
$comments[$row['parent']]['replies'][] = $row;
        

        
// If it is a reply, put it in the 'replies' property of its parent
    
}


foreach(
$comments as $a)
    {
 
showComment($a);

    }
:


para hacer la paginacion encontre esto que funciona perfectamente desde un array pero en esta funcion con array hablo de showComment($a) no sale no entiendo porque por fa ayuda :

Código PHP:
function paginar($v$l$p) {

// DEFINIMOS LA CANTIDAD DE PÁGINAS
$paginas ceil(count($v) / $l);

// CONDICION DE INICIO
$inicio = ($p-1)*$l;
      
// CONDICION DE FINAL
$final $p*$l;


// MOSTRAMOS LOS ITEMS RESPECTIVOS
      
echo '<div id="resultados">';
      for (
$i=$inicio$i<$final$i++) {
         if (isset(
$v[$i]))
            echo 
"<div id=\"item\">$i.- $v[$i]</div>";
         else 
            break;
      }
      echo 
'</div>';
      
      
      
// LISTAMOS LAS PÁGINAS
      
echo '<div id="paginas">';
      if (
$p>1)
         echo 
"<a href=\"topic.php?id=62&screen=" . ($p-1) . "\">Anterior</a>&nbsp;-&nbsp;";
      
      for (
$i=1$i<=$paginas$i++) {
         if (
$i == $p)
            echo 
"<strong>".$i."</strong>&nbsp;";
         else 
            echo 
"<a href=\"topic.php?id=62&screen=$i\">$i</a>&nbsp;";
      }
      
      if (
$p<$paginas)
         echo 
"&nbsp;-&nbsp;<a href=\"topic.php?id=62&screen=" . ($p+1) . "\">Siguiente&nbsp;-&nbsp;</a>";
      echo 
'</div>';
return;
   } 
asi supuestamente saldria la paginacion :

Código PHP:
if (isset($_GET['screen'])){
      
$p $_GET['screen'];
  } else {
      
$p=1;
      }
   
paginar(showComment($a), 2$p); 
pero no salee ahora si yo defino un array :

ejemplo :
Código PHP:
 array(
    
clave  => valor,
    
clave2 => valor2,
    
clave3 => valor3,
    ...
    ) 
si sale la paginacion normal , alguna ayuda porfa¡ ¡¡¡¡ :SSSSSSSS me eh quedado estancado
  #6 (permalink)  
Antiguo 14/03/2014, 16:31
 
Fecha de Ingreso: octubre-2013
Mensajes: 1
Antigüedad: 11 años
Puntos: 0
Respuesta: Paginacion con foreach

Yo creo que tu error esta la momento de mandar a llamar la función de paginar

paginar(showComment($a), 2, $p);

le estas mandando como primer parámetro lo que devuelve tu función showComment(), lo que no necesariamente es un arreglo y paginar necesita como parámetro de entrada un arreglo con la información a paginar para que funcione bien.
  #7 (permalink)  
Antiguo 14/03/2014, 19:59
 
Fecha de Ingreso: diciembre-2013
Mensajes: 108
Antigüedad: 10 años, 11 meses
Puntos: 1
Respuesta: Paginacion con foreach

Cita:
Iniciado por cxndxr Ver Mensaje
Yo creo que tu error esta la momento de mandar a llamar la función de paginar

paginar(showComment($a), 2, $p);

le estas mandando como primer parámetro lo que devuelve tu función showComment(), lo que no necesariamente es un arreglo y paginar necesita como parámetro de entrada un arreglo con la información a paginar para que funcione bien.
Muchas gracias por responder, no me podrias dar algun ejemplo? de como hacer un arreglo???

Etiquetas: foreach, paginacion
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 21:38.