Manual:Pager.php

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Pager.php and the translation is 100% complete.
Other languages:
English • ‎español • ‎français • ‎português do Brasil • ‎日本語

A classe IndexPager fornece funções úteis para resultados de paginação dos resultados do 'query fieldset', para o MySQL. A classe IndexPager é utilizada, por exemplo, na página especial Special:Categories.

Exemplo de uso

O primeiro passo para usar o IndexPager em suas extensões especiais página está em criar uma classe chamada, por exemplo MyExtensionsPager que estende uma destas três classes:

  • AlphabeticPager é usado quando você deseja listar os itens em ordem alfabética
  • ReverseChronologicalPager é usada quando você deseja listar os itens em uma ordem cronológica inversa
  • TablePager é usada quando você deseja exibir itens em linhas da tabela

Cada uma destas três classes (AlphabeticPager, ReverseChronologicalPager e TablePager) estende a classe IndexPager.

Normalmente, você só deve ter que substituir alguns métodos em sua classe:

  • getQueryInfo() deixar o pager conhecer a consulta SQL que você deseja executar. Ele deve retornar um array associativo com os seguintes elementos:
    • "tables" => tabela(s) usada(s) na consulta
    • "fields" => campo(s) a passar para Database::select(), pode ser * (todos os campos na tabela)
    • "conds" => um array que contém as condições para a cláusula WHERE
    • "options" => um array que contém outras opções (tais como GROUP BY)
  • formatRow( $row ) obtém um argumento, $row, que é um objeto de linha do fieldset de resultado. A função deve retornar uma string que contém o item formatado como você precisa.
  • getIndexField() deve retornar o nome do campo da tabela usada para indexar e ordenar resultados.

Por exemplo, se você deseja listar todas as páginas do NS0 utilizando um pager, você deve fazer algo assim:

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

}

No corpo de sua página especial, então você tem que:

  • criar uma nova classe AllPagesPager()
  • usar o método getNavigationBar() para colocar a barra de navegação na parte superior e na parte inferior da página
  • usar o método getBody() para colocar a lista dos itens

Por exemplo:

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