Jump to content

Manuel:Pager.php

From mediawiki.org
This page is a translated version of the page Manual:Pager.php and the translation is 100% complete.

La classe IndexPager fournit des fonctions utiles pour pour la pagination des résultats des champs d'une requête MySQL. La classe IndexPager est utilisée par exemple dans la page spéciale Spécial:Catégories.

Exemples d'utilisation

La première étape pour utiliser IndexPager dans votre extension de page spéciale est de créer une classe nommée par exemple MaPaginationExtension qui étend une de ces trois classes:

  • Utiliser AlphabeticPager si vous voulez que vos résultats soient en ordre alphabétique
  • Utiliser ReverseChronologicalPager quand vous voulez que vos résultats soient dans un ordre chronologique inversé (le plus récent d'abord)
  • Utiliser TablePager si vous voulez que vos résultats soient affichés dans des lignes d'un tableau

Chacune de ces trois classes (AlphabeticPager, ReverseChronologicalPager et TablePager) sont des extensions de la classe IndexPager.

Normalement, vous ne devriez avoir à remplacer que quelques méthodes dans votre classe:

  • getQueryInfo() fournir la requête SQL que vous voulez exécuter au pager. Il devrait renvoyer un tableau associatif avec les éléments suivants:
    • "tables" => tableau(x) utilisés dans la requête,
    • "fields" => champ(s) à passer à Database::sélect(), peut être * pour tous les champs dans le tableau,
    • "conds" => un tableau contenant les conditions pour la clause WHERE (où),
    • "options" => un tableau contenant les autres options comme GROUP BY (grouper par).
  • formatRow( $row ) obtient un argument, $row, qui est un objet ligne de l'ensemble de champs du résultat. La fonction devrait renvoyer une chaîne contenant l'item formaté comme nécessaire.
  • getIndexField() devrait renvoyer le nom du champ du tableau utilisé pour l'indexation et le tri des résultats.

Par exemple, si vous voulez lister toutes les pages dans le NSO avec un pager, vous devriez faire quelque chose comme ceci:

class AllPagesPager extends AlphabeticPager {
	function getQueryInfo() {
		return array(
			'tables' => 'page',
			'fields' => 'page_title',
			'conds' => array( 'page_is_redirect' => '0', 'page_namespace' => '0' )
		);
	}

	function getIndexField() {
		return 'page_title';
	}

	function formatRow( $row ) {
		$title = Title::newFromDBkey( $row->page_title );
		$s = '<li><a href="' . $title->getFullURL() . '">' . $title->getText() . '</a></li>';
		return $s;
	}

}

Dans le corps de votre page spéciale vous devez:

  • créer une nouvelle classe AllPagesPager()
  • utiliser la méthode getNavigationBar() pour placer la barre de navigation en haut et en bas de la page
  • utiliser la méthode getBody() pour mettre la liste des éléments.

Par exemple :

$pager = new AllPagesPager();
$wgOut->addHTML(
	$pager->getNavigationBar() . '<ol>' .
	$pager->getBody() . '</ol>' .
	$pager->getNavigationBar()
);


Voir aussi