FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Recherche rapide

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

fluxbb_1_2:astuces:supprimer_duplication_urls [2010/06/26 22:27] (version actuelle)
Ligne 1: Ligne 1:
 +====== Empêcher la duplication des URL ======
 +Astuce donnée par [[http://fluxbb.fr/forums/profile.php?id=68|Ju]] dans [[http://fluxbb.fr/forums/viewtopic.php?pid=32279#p32279|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]**
 +<code php>// Close the db connection (and free up any result data)
 +$db->close();</code>
 +**[AVANT, AJOUTER]**
 +<code php>/* 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 */</code>
 
fluxbb_1_2/astuces/supprimer_duplication_urls.txt · Dernière modification: 2010/06/26 22:27 (édition externe)