Page 1 sur 1

Pagination

Posté : 12 févr. 2007, 15:29
par zaknaou
Bonjour, j'ai trouver un asser bon script sur la pagination dans le web, le voici :

<?php
/**
 * Fonction créant une pagination
 *
 * @param int $nb_data le nombre de donnée
 * @param int $data_per_page le nombre de donnée sur une seule page
 * @param int $nb_link_per_page nombre de liens affiché sur les cotés de la page courante
 * @param string $url l'url de la page actuelle
 * @param bool $url_rewriting activation de l'url rewriting
 * @param string $var_page nom de la variable $_GET
 * @param string $display contenu s'affichant avant les numéros des pages
 * @return array
 */

function pagination($nb_data, $data_per_page = 10, $nb_link_per_page = 5, $url = '', $url_rewriting = false, $var_page = 'page', $display = '')
{
	$data_per_page = is_numeric($data_per_page) ? $data_per_page : 10;
	
	if ($nb_data > 0 && $nb_data > $data_per_page)
	{
		$nb_pages = ceil($nb_data / $data_per_page);
		$current_page = !empty($_GET[$var_page]) && is_numeric($_GET[$var_page]) && $_GET[$var_page] < $nb_pages + 1 ? $_GET[$var_page] : 1;
		$start_page = ($current_page - 1) * $data_per_page;
		
		if ($url_rewriting)
		{
			$link = $url;
			
			$next_page = sprintf($url, $current_page + 1);
			$previous_page = sprintf($url, $current_page - 1);
			$first_page = sprintf($url, 1);
			$last_page = sprintf($url, $nb_pages);
		}
		else
		{
			$link .= strstr($url, '?') ? '&' : '?';
			$link .= $var_page . '=';
			
			$next_page = $link . ($current_page + 1);
			$previous_page = $link . ($current_page - 1);
			$first_page = $link . 1;
			$last_page = $link . $nb_pages;
		}
		
		if ($current_page != 1)
		{
			$display .= ' <a href="' . $first_page . '" title="Première page"><<</a> ';
			$display .= ' <a href="' . $previous_page . '" title="Page précédente"><</a> ';
		}
		
		for ($i = 1; $i <= $nb_pages; $i++)
		{
			if ($i - 1 < $current_page + $nb_link_per_page && $i + 1 > $current_page - $nb_link_per_page)
			{
				if ($i == $current_page)
				{
					$display .= ' <span>' . $i . '</span> ';
				}
				else
				{
					if ($url_rewriting)
					{
						$url = sprintf($link, $i);
					}
					else
					{
						$url = $link . $i;
					}
				
					$display .= ' <a href="' . $url . '" title="Page ' . $i . '">' . $i . '</a> ';
				}
			}
		}
		
		if ($current_page != $nb_pages)
		{
			$display .= ' <a href="' . $next_page . '" title="Page suivante">></a> ';
			$display .= ' <a href="' . $last_page . '" title="Dernière page">>></a> ';
		}
		
		$pagination = array(
			'nb_data' => $nb_data,
			'nb_pages' => $nb_pages,
			'start_page' => $start_page,
			'data_per_page' => $data_per_page,
			'current_page' => $current_page,
			'display' => $display
		);
		
		return $pagination;
	}
	else
	{
		return null;
	}
	
}

/* Petit exemple d'utilisation */

$datas = array();
for ($i = 1; $i <= 10000; $i++)
{
	$datas[] = 'niah_' . $i;
}

// Avec url rewriting
$pagination = pagination(count($datas), 20, 10, 'index-%s.html', true, 'p', 'Pages : ');

// Sans url rewriting
$pagination = pagination(count($datas), 20, 10, $_SERVER['PHP_SELF'], false, 'p', 'Pages : ');

$datas = array_slice($datas, $pagination['start_page'], $pagination['data_per_page']);

foreach ($datas as $data)
{
	echo $data . '<br />';
}

echo '<br />' . $pagination['display'];
?>
Quand je le porte sur le serveur je me rend compte qu'il a niah_1,2,3... 10000, bon ce n'est pas une surprise, mais comment remplasser niah_ par $message que je définirait moi même en haut de la page, en sachant que sa ne selectionne pas 20 enregistrement ou valeur de $message mais par exemple 1359 caractères...

Si j'en demande trop dites-le moi, y a une partie du script (la fin) que je ne comprend pas du tout...
Merci...

Posté : 12 févr. 2007, 16:54
par Ultim4T0m
Je n'ai pas bien compris la question, mais peut-être est-ce ceci que tu cherches :
for ($i = 1; $i <= 10000; $i++)
{
    $datas[] = 'niah_' . $i;
} 
A changer en :
for ($i = 1; $i <= 10000; $i++)
{
    $datas[] = $message . $i;
} 

Posté : 12 févr. 2007, 18:13
par zaknaou
Ce que je cherche est en fait un peu plus rafiné :

Dans le code présenter plus haut, on obient :
valeur du message ici 1
valeur du message ici 2
valeur du message ici 3
valeur du message ici 4
valeur du message ici 5
valeur du message ici 6
valeur du message ici 7
valeur du message ici 8
valeur du message ici 9
valeur du message ici 10
valeur du message ici 11
valeur du message ici 12
valeur du message ici 13
valeur du message ici 14
valeur du message ici 15
valeur du message ici 16
valeur du message ici 17
valeur du message ici 18
valeur du message ici 19
valeur du message ici 20
Comment éviter la répétition de
valeur du message ici
et le diviser selon sa longeur en x page

par exemple, la limite est de 50 caractères si un texte de 400 caractères est la valeur de $message donc on obtien 8 pages

Posté : 12 févr. 2007, 18:57
par zaknaou.
bon je peu être encore plus simple :
Comment afficher 50 caractères par page ?

Posté : 12 févr. 2007, 19:09
par Ultim4T0m
Il faudrait être plus clair dans ce que tu cherches...

50 caractères de quoi ? Qu'est ce que ta variable $message ?
for ($i = 1; $i <= 10000; $i++)
{
    $datas[] = $i;
} 
Ceci ne devrait afficher que les numéros

Posté : 12 févr. 2007, 19:50
par zaknaou.
Bon un visiteur créer un blog avec pour valeur de la variable $message :
Voici donc un Topic sur les boitiers Lian-Li, marque de référence pour les boitiers en alu.
Si vous avez la chance de posséder une de ces merveilles, n'hésitez point à y mettre vos photos!
Commande groupée du boîtier Lian-Li pc 73sl
( Par exemple)

//--------------->>

Le blog ne va afficher que 50 caractéres par page de $message aprés cela il numérote à partir de 2

//--------------->>

Dans la FAQ de phpfrance y a un trux semblabe, mais qui affiche 1 enregistrement par page... Alors que moi je veut afficher un enregistrement divisé en plusieur page si il dépasse 50 caractères

//--------------->>

Est-ce précis, clair, compréhensible ?

...

Posté : 12 févr. 2007, 19:53
par zaknaou.
Le blog ne va afficher que 50 caractéres par page de $message aprés cela il numérote à partir de 2
Quand je dit il numérote a partir de 2 c'est dans le navigateur en bas de page avec debut, précédant, 1,2,3... suivant,fin

ou :

<< < 1 2 3 > >>