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.
4 réponses à “Solution au problème des URLs dans la fonction Billet suivant/précédent de Dotclear”
Efficace !
Pour une meilleur compréhension des lecteurs, il serait préférable de remettre tout le code.
Vive Dotclear, Vive Aymeric !
Djoh : oui, à défaut d’être élégant, ça fonctionne.
J’ai ajouté le code complet.
En tout cas, merci !
Je dois t’avouer que j’ai modifié toutes mes URL la semaine dernière, n’arrivant pas à résoudre le problème… Mais maintenant, je peux y revenir, c’est toujours ça ! :)
C’est très pratique, merci.