Voici donc la solution, attention, ce n’est pas très propre, je le rappelle, je ne suis pas développeur :
Il faut reprendre le code que j’avais fourni dans le billet précédent et le modifier ainsi :
$strReq = 'SELECT post_id, post_titre, post_dt, post_chapo, post_content, post_titre_url '.
'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;
}
On a ajouté le SELECT sur post_titre_url
, qui manquait cruellement à la fonction.
Ensuite on va créer une variable reprenant cette valeur, comme je suis d’humeur joyeuse, on va l’appeler $youpla
et l’on va modifier la partie du script touchant à la variable $url qui fait appel à la variable $titre
, en remplaçant la variable $titre
par $youpla
, ce qui nous donne la chose suivante :
$id = $rs->f('post_id');
$titre = $rs->f('post_titre');
$date = $rs->f('post_dt');
$ts = strtotime($date);
$youpla = $rs->f('post_titre_url');
$url = sprintf($blog->front_url['post'],date('Y',$ts),
date('m',$ts),date('d',$ts),$id,$blog->str2url($youpla));
Ce qui donne au final le code complet suivant à ajouter dans le fichier prepend.php
de votre thème :
/** * 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, post_chapo, post_content, post_titre_url '.
'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);
$youpla = $rs->f('post_titre_url');
$url = sprintf($blog->front_url['post'],date('Y',$ts),
date('m',$ts),date('d',$ts),$id,$blog->str2url($youpla));
if ($rs->f('post_chapo') != '') {
$desc = strip_tags($rs->f('post_chapo'));
} else {
$desc = util::cutString(strip_tags($rs->f('post_content')),150).'...';
}
printf($s,$id,$titre,$url,$desc);
}
else {
printf('< h5 >Vous êtes sur le dernier article de la rubrique< /h5 >< p >Le prochain article est, probablement, en cours de rédaction.< /p >< p >Cordialement,< br / >Aymeric Jacquet< /p >');
}
}
N’oubliez pas de personnaliser le texte de remplacement à la fin du code.
Et voila, maintenant nos liens vers les articles précédents et suivants sont bien les liens réels des articles et non plus le titre inséré en lien.