Au sein du blog

Cette fonctionnalité est disponible en standard dans le code de DotClear, vous n'aurez rien d'autre à faire qu'ajouter le code d'appel dans votre fichier post.php.

Dans le fichier post.php de votre thème

Ajouter, juste avant <div class="post"> ou à tout autre endroit qui vous conviendra l'appel à cette fonction : Pour afficher les titres des billets :

<p><?php dcPostNext(-1,'<a href="%3$s" title="%2$s">%2$s</a>'); ?> :: <?php dcPostNext(1,'<a href="%3$s" title="%2$s">%2$s</a>'); ?></p>

Pour afficher les mentions « billet précédent » et « billet suivant » :

<p><?php dcPostNext(-1,'<a href="%3$s" title="%2$s">billet pr&eacute;c&eacute;dent</a>'); ?> :: <?php dcPostNext(1,'<a href="%3$s" title="%2$s">billet suivant</a>'); ?></p>

Au sein d'une catégorie

Pillé sur le forum, dans ce fil (post #10), le code pépien que voici :

Dans le fichier prepend.php de votre thème

Ajouter avant la dernière ligne

(?>) les lignes suivantes :
/** * Naviguer d'un billet a l'autre dans la meme categorie
* @function dcPostNextInCat
*/
function myGetNextID($ts,$dir=1,$cat=0) {
	global $blog;
	$ts = (integer) $ts;
	$reqPlus = ''; 	if($dir > 0) {
		$sign = '>';
		$order = 'ASC';
	} else {
		$sign = '<';
		$order = 'DESC';
	}
	if ($blog->pub_mode !== NULL) {
		$reqPlus .= 'AND post_pub = '.$blog->pub_mode.' ';
	}
	if ($blog->lang !== NULL) {
		$reqPlus .= 'AND post_lang = \''.$blog->con->escapeStr($blog->lang).'\' ';
	}
	if ($cat !== 0) {
	   $reqPlus .= 'AND cat_id = '.$cat.' ';
	}
	$strReq = 'SELECT post_id, post_titre, post_dt '.
			'FROM '.$blog->t_post.' '.
			'WHERE UNIX_TIMESTAMP(post_dt) '.$sign.' \''.$ts.'\' '.
			$reqPlus.
			'ORDER BY post_dt '.$blog->con->escapeStr($order).' '.
			'LIMIT 0,1 '; 	if (($rs = $blog->con->select($strReq)) !== false) {
		return $rs;
	} else {
		$blog->setError('MySQL : '.$blog->con->error(),2000);
		return false;
	}
}
function dcPostNextInCat($dir,$s='%1$s %2$s %3$s') {
	global $blog;
	global $news;
	$rs = myGetNextID($news->getTS(), $dir, $news->f('cat_id'));
	if (!$rs->isEmpty())
	{
		$id = $rs->f('post_id');
		$titre = $rs->f('post_titre');
		$date = $rs->f('post_dt');
		$ts = strtotime($date);
		$url = sprintf($blog->front_url['post'],date('Y',$ts),
		date('m',$ts),date('d',$ts),$id,$blog->str2url($titre));
		printf($s,$id,$titre,$url);
	}
}
Dans le fichier post.php de votre thème

Ajouter, juste avant <div class="post"> ou à tout autre endroit qui vous conviendra l'appel à cette fonction : Pour afficher les titres des billets :

<p><?php dcPostNextInCat(-1,'<a href="%3$s">%2$s</a>'); ?> :: <?php dcPostNextInCat(1,'<a href="%3$s">%2$s</a>'); ?></p> ::

Pour afficher les mentions « billet précédent » et « billet suivant » :

<p><?php dcPostNextInCat(-1,'<a href="%3$s">billet pr&eacute;c&eacute;dent</a>'); ?>
<?php dcPostNextInCat(1,'<a href="%3$s">billet suivant</a>'); ?></p>

Remarque

Rien n'interdit de placer entre les appels du billet précédent et du billet suivant un lien vers l'ensemble des billets (sommaire ou accueil) ou un lien vers la liste des billets de la catégorie.

Mise à jour du 29 mars : correction du code (le wiki interprétait les antislashes comme des signes d'échappement). Pour plus de sûreté, téléchargement de la source au format texte navincat.txt (lien réparé).