Pour obtenir une navigation du type :

Pages : 1 2 3 ... 8 9 ... 14 15 16,

coller le code suivant dans le fichier _public.php du thème actif :

<?php
l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/main');

$core->tpl->addValue('PaginationLinks', array('tplMyPagination', 'PaginationLinks'));

class tplMyPagination {
	public static function PaginationLinks($attr)
	{
		$p = '<?php
		
		function makePageLink($pageNumber, $linkText) {
			if (isset($GLOBALS["_page_number"])) {
				$current = $GLOBALS["_page_number"];
			} else {
				$current = 1;
			}
			if ($pageNumber != $current) {
				$args = $_SERVER["URL_REQUEST_PART"];
				$args = preg_replace("#(^|/)page/([0-9]+)$#","",$args);
				$url = $GLOBALS["core"]->blog->url.$args;
				if ($pageNumber > 1) {
					$url = preg_replace("#/$#","",$url);
					$url .= "/page/".$pageNumber;
				}
				if (!empty($_GET["q"])) {
					$s = strpos($url,"?") !== false ? "&amp;" : "?";
					$url .= $s."q=".$_GET["q"];
				}
				$linkDesc = $GLOBALS["__l10n"]["Go to page"]."&nbsp;".$linkText;
				return "<li><a href=\"".$url."\" title=\"".$linkDesc."\">".$linkText."</a></li>";
			} else {
				return "<li><span class=\"this\">".$linkText."</span></li>";
			}
		}
		
		if (isset($GLOBALS["_page_number"])) {
			$current = $GLOBALS["_page_number"];
		} else {
			$current = 1;
		}
		if ($_ctx->exists("pagination")) {
			$nb_posts = $_ctx->pagination->f(0);
		}
		
		/* Variables to tweak the pagination system */
		$nb_per_page = $_ctx->post_params["limit"][1];
		$nb_pages = ceil($nb_posts/$nb_per_page);
		$nb_sequence = 2 * 3 + 1;
		
		echo "<ul>";
		?>';
		
		if (!isset($attr['max'])) { $p .= '<?php $nb_page_max = 0; ?>'; } else { $p .= '<?php $nb_page_max = '.$attr['max'].'; ?>'; }
		$p .= '<?php
		
		if ($nb_page_max == 0 || $nb_pages <= $nb_page_max) {
			for ($i = 1; $i <= $nb_pages; $i++) {
				echo makePageLink($i,$i);
			}
		} else {
			echo makePageLink(1,1);
			$min_page = max($current - ($nb_sequence - 1) / 2, 2);
			$max_page = min($current + ($nb_sequence - 1) / 2, $nb_pages - 1);
			if ($min_page > 2) { echo "<li><span class=\"etc\">...</span></li>"; }
			for ($i = $min_page; $i <= $max_page ; $i++) {
				echo makePageLink($i,$i);
			}
			if ($max_page < $nb_pages - 1) { echo "<li><span class=\"etc\">...</span></li>"; }
			echo makePageLink($nb_pages,$nb_pages);
		}
		echo "</ul>";
		
		?>';
		
		return $p;
	}
}
?>

Appeler ensuite cette fonction en collant la ligne suivante à l'endroit voulu :

{{tpl:PaginationLinks}}

On peut aussi passer un paramètre, pour limiter le nombre de pages, sous la forme :

{{tpl:PaginationLinks max="10"}}

Ajouter la traduction suivante dans le fichier locales/fr/main.lang.php du thème actif :

$GLOBALS['__l10n']['Go to page'] = 'Aller en page';

Ajouter la traduction suivante dans le fichier locales/fr/main.po du thème actif :

msgid "Go to page"
msgstr "Aller en page"