Hola
Estoy en el mismo dilema que tu, pero creo que tengo una nocion o idea para la solucion espero que te sirva bastante, este codigo esta sacado del phpbb por si te funciona, me avisas ok?
Código PHP:
<? //para indicar donde esta la pagina inicial de la paginacion
$start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0;
$start = 1;
// arreglo para guardar los datos requeridos en la consulta
$topic_rowset = array();
//parametro para saber cuantos registros debemos mostrar en cada pagina
$topics_per_page=10;
// la consulta debe ser similar a mysql
$query = "SELECT idforo, nombreforo, tipoforo, descripcionforo FROM foro WHERE estado = 'A' AND tipoforo = 2 ORDER BY idforo asc LIMIT ".$start.", ".$topics_per_page;
// de esta condicion sacamos los valores de limit por medio de expresiones regulares
if( preg_match('#^SELECT(.*?)(LIMIT ([0-9]+)[, ]*([0-9]+)*)?$#s', $query, $limits) )
{
//oobtenemos la primera parte del query hasta el Limit
$query = $limits[1];
//preguntamo sobre la existencia de la cadena LIMIT
if( !empty($limits[2]) )
{
// sacamos el numero inicial de fila
$row_offset = ( $limits[4] ) ? $limits[3] : "";
//numero de filas a mostrar
$num_rows = ( $limits[4] ) ? $limits[4] : $limits[3];
// adicionamos el Select top para que nos saque los n primeros registros
$query = "SELECT TOP " . ( $row_offset + $num_rows ) . $query;
}
}
//ejecutamos la consulta
$result1 = mssql_query($query);
if( $row_offset > 0 )
{
//nos posesionamos sobre la fila que empezaremos a mostrar
mssql_data_seek($result1, $row_offset);
}
/// indica el numero total de los registros que mostraremos
$total_topics = 0;
//cargamos el arreglo envase a las consulta, aqui siempre toma a partir del $row_offset hacia adelante
while( $row1 = mssql_fetch_array($result1))
{
$topic_rowset[] = $row1;
$total_topics++;
}
//desplegamos de la siguiente manera en nuestra pagina
echo echo " <table>";
for($i = 0; $i < $total_topics; $i++)
{
echo "<tr><td>";
echo $topic_rowset[$i]['idforo'];
echo "</tr></td>";
}
echo "</table>";
//funcion para generar la barra de navegacion
function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)
{
global $lang;
$total_pages = ceil($num_items/$per_page);
if ( $total_pages == 1 )
{
return '';
}
$on_page = floor($start_item / $per_page) + 1;
$page_string = '';
if ( $total_pages > 10 )
{
$init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages;
for($i = 1; $i < $init_page_max + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $init_page_max )
{
$page_string .= ", ";
}
}
if ( $total_pages > 3 )
{
if ( $on_page > 1 && $on_page < $total_pages )
{
$page_string .= ( $on_page > 5 ) ? ' ... ' : ', ';
$init_page_min = ( $on_page > 4 ) ? $on_page : 5;
$init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4;
for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
{
$page_string .= ($i == $on_page) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $init_page_max + 1 )
{
$page_string .= ', ';
}
}
$page_string .= ( $on_page < $total_pages - 4 ) ? ' ... ' : ', ';
}
else
{
$page_string .= ' ... ';
}
for($i = $total_pages - 2; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if( $i < $total_pages )
{
$page_string .= ", ";
}
}
}
}
else
{
for($i = 1; $i < $total_pages + 1; $i++)
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
if ( $i < $total_pages )
{
$page_string .= ', ';
}
}
}
if ( $add_prevnext_text )
{
if ( $on_page > 1 )
{
$page_string = ' <a href="' . append_sid($base_url . "&start=" . ( ( $on_page - 2 ) * $per_page ) ) . '">' . $lang['Previous'] . '</a> ' . $page_string;
}
if ( $on_page < $total_pages )
{
$page_string .= ' <a href="' . append_sid($base_url . "&start=" . ( $on_page * $per_page ) ) . '">' . $lang['Next'] . '</a>';
}
}
$page_string = $lang['Goto_page'] . ' ' . $page_string;
return $page_string;
}
?>
atte JULIO