Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Auteur : Ju
Arrêter la duplication des URL de messages dans les moteurs de recherche.
Dans un même topic :
http://FORUMS/viewtopic.php?pid=XXX#pXXX
http://FORUMS/viewtopic.php?pid=YYY#pYYY
Ces deux adresses de message sont considérées par les moteurs de recherche comme deux pages différentes, alors qu'elles ont un contenu identique.
Cette mod empêche la duplication de contenu dans les moteurs.
Note : Fonctionne également avec l'URL Rewriting.
http://www.punres.org/viewtopic.php?id=2611
http://forums.punbb.org/viewtopic.php?id=14271
http://www.punbb.fr/forums/viewtopic.php?id=4046
http://www.punbb.fr/aide/doku.php/astuc … ation_urls
Avant de poser une question, avez-vous consulté le WIKI ?
Effectué une recherche ?
Hors ligne
Vin : y'a pas vraiment de catégorie pour ce genre de correctif, j'ai mis dans "Vue forum" en ne sachant pas trop ce tu entendais par là, mais ça doit pas vraiment correspondre...
Avant de poser une question, avez-vous consulté le WIKI ?
Effectué une recherche ?
Hors ligne
Merci ! 
Hors ligne
Nikel Ju. :canon:
Je corrige dans le wiki. 
Edit : Corrigé. 
Par ailleurs, voilà la version française : 
/* Début - Empêcher la duplication des adresses */
// URL Rewriting ?
$pattern_in = 'viewtopic.php?pid=<PID>';
$pattern_out = 'viewtopic.php?id=<ID>&p=<P>';
// On commence par récupérer les pid de tous les liens qui appellent un message précis
preg_match_all('#'.str_replace('\<PID\>', '([0-9]+)', preg_quote($pattern_in, '#')).'#', $tpl_main, $pids);
$pids = array_unique($pids[1]);
if(!empty($pids)) {
// On récupére ensuite les id des topics qui correspondent aux différents pid
$result = $db->query('SELECT id, topic_id FROM '.$db->prefix.'posts WHERE id='.implode(' OR id=', $pids)) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
if (!$db->num_rows($result))
message($lang_common['Bad request']);
while ($pid_id = $db->fetch_assoc($result))
{
$adresse[$pid_id['id']] = Array('topic_id' => $pid_id['topic_id']);
if (isset($query))
$query .= ' OR topic_id='.$pid_id['topic_id'];
else
$query = $pid_id['topic_id'];
}
// On récupére et on classe ensuite les pid de tous les posts de tous les topics concernés
$result = $db->query('SELECT topic_id, id FROM '.$db->prefix.'posts WHERE topic_id='.$query.' ORDER BY posted') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
while ($id_pid = $db->fetch_assoc($result))
$posts[$id_pid['topic_id']][] = $id_pid['id'];
// On recherche les pid des liens dans les pid des topics et on récupére la place qu'ils occupent pour calculer leur page
foreach ($posts AS $id => $pids)
{
foreach(array_keys($adresse) AS $pid) {
if(($position = array_search($pid, $pids)) !== false)
$adresse[$pid]['p'] = ceil(($position + 1) / $pun_user['disp_posts']);
}
}
// On remplace enfin les adresses avec les pid par des adresses uniques et directes avec l'id du topic en précisant la page
foreach($adresse AS $pid => $url)
$tpl_main = str_replace(str_replace('<PID>', $pid, $pattern_in), htmlentities(str_replace(Array('<ID>', '<P>'), Array($url['topic_id'], $url['p']), $pattern_out)), $tpl_main);
}
// On en profite pour virer tous les ?p=1 ou &p=1 qui doublonnent aussi inutilement les pages
$tpl_main = preg_replace('#(\?|&)p\=1([^0-9]{1})#', '$2', $tpl_main);
/* Fin dupplication */Par ailleurs, il faudra penser à mettre à jour sur le .org et sur PunRes. 
Dernière modification par romain9441 (13-01-2007 17:15:34)
Avant de poser une question, avez-vous consulté la FAQ ou fait une recherche ?
Pas de support si pas d'adresse de forum !
Hors ligne
Par ailleurs, il faudra penser à mettre à jour sur le .org et sur PunRes.
J'ai mis à jour les archives ici et sur punres avant de valider le message.
Sur le .org, c'est juste un lien vers punres.
Avant de poser une question, avez-vous consulté le WIKI ?
Effectué une recherche ?
Hors ligne