FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Recherche rapide

Empêcher la duplication des URL

Astuce donnée par Ju dans un message sur FluxBB.fr

Cette astuce sert à empêcher la duplication des URL pour un même contenu afin d'obtenir une meilleur indexation par les moteurs de recherche.

Dans le fichier footer.php [TROUVER]

// Close the db connection (and free up any result data)
$db->close();

[AVANT, AJOUTER]

/* 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('#(\?|&amp;)p\=1([^0-9]{1})#', '$2', $tpl_main);
 
/* Fin dupplication */
 
fluxbb_1_2/astuces/supprimer_duplication_urls.txt · Dernière modification: 2010/06/26 22:27 (édition externe)