Manuel:Pager.php
Cette page est obsolète. |
Fichier MediaWiki : Pager.php | |
---|---|
Emplacement : | includes/pager/ |
Code source : | master • 1.42.3 • 1.41.4 • 1.39.10 |
Classes : | Pager |
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()
);