Pagination

Eléphant du PHP | 88 Messages

12 févr. 2007, 15:29

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...
Cordialement zaknaou

Eléphant du PHP | 445 Messages

12 févr. 2007, 16:54

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;
} 
LLDC
Ulti

Eléphant du PHP | 88 Messages

12 févr. 2007, 18:13

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
Cordialement zaknaou

zaknaou.
Invité n'ayant pas de compte PHPfrance

12 févr. 2007, 18:57

bon je peu être encore plus simple :
Comment afficher 50 caractères par page ?

Eléphant du PHP | 445 Messages

12 févr. 2007, 19:09

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
LLDC
Ulti

zaknaou.
Invité n'ayant pas de compte PHPfrance

12 févr. 2007, 19:50

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 ?

...

zaknaou.
Invité n'ayant pas de compte PHPfrance

12 févr. 2007, 19:53

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 > >>