Manual:Pager.php
Appearance
This page is outdated. |
MediaWiki file: Pager.php | |
---|---|
Location: | includes/pager/ |
Source code: | master • 1.42.3 • 1.41.4 • 1.39.10 |
Classes: | Pager |
The IndexPager class provides useful functions for paging results of MySQL query fieldset results. The IndexPager class is used for example in the special page Special:Categories.
Usage example
The first step to use the IndexPager in your special page extensions is creating a class named for example MyExtensionsPager
that extends one of these three classes:
AlphabeticPager
is used when you want to list your items in alphabetical orderReverseChronologicalPager
is used when you want to list your items in a reverse chronological orderTablePager
is used when you want display items in table rows
Each of these three class (AlphabeticPager
, ReverseChronologicalPager
and TablePager
) extends the IndexPager
class.
Usually you should only have to override a few methods in your class:
getQueryInfo()
let the pager know the SQL query you want to execute. It should return an associative array with the following elements:"tables" =>
table(s) used in the query,"fields" =>
field(s) for passing to Database::select(), may be * (all fields in table),"conds" =>
an array containing conditions for WHERE clause,"options" =>
an array containing other options (such as GROUP BY).
formatRow( $row )
gets an argument,$row
, which is a row object from the result fieldset. The function should return a string containing the item formatted as you need.getIndexField()
should return the name of the table field used for indexing and ordering results.
For example, if you want to list all pages in the NS0 using a pager, you should do something like that:
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;
}
}
In your special page body than you have to:
- create a new
AllPagesPager()
class - use the
getNavigationBar()
method for putting the navigation bar on the top and on the bottom of the page - use the
getBody()
method for putting the list of the items.
For example:
$pager = new AllPagesPager();
$wgOut->addHTML(
$pager->getNavigationBar() . '<ol>' .
$pager->getBody() . '</ol>' .
$pager->getNavigationBar()
);