Pokud provozujete své vlastní phpBB fórum, jistě chcete jít s dobou a mít i kvalitní sitemapu. Bohužel phpBB v současné době nemá žádné oficiální rozšíření pro generování sitemap. Nebudu to protahovat, řešení je jednoduché. Za php skript děkuji EOF.
Ovšem bylo potřeba skript trochu upravit, aby byl funkční i na aktuální verzi phpBB, tudíž jsem tak učinil a nyní mi perfektně funguje, třeba tady na Herní poradně (ještě jsem přidal do .htaccess tento zápis: RewriteRule sitemap.xml sitemap.php, takže můžu používat i url sitemap.xml).
Zdrojový PHP kód sitemap.php:
<?php require_once('config.php'); mysql_connect($dbhost, $dbuser, $dbpasswd); mysql_select_db($dbname);$domain_root = 'http://www.vasedomena.cz/'; header('Content-Type: text/xml; charset=utf-8');$fid = -1; if (isset($_GET['fid'])) { $fid = (integer)$_GET['fid']; }define("POSTS_TABLE", "phpbb_posts"); define("TOPICS_TABLE", "phpbb_topics");if ($fid > 0) { echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; echo "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n"; $sql = " SELECT * FROM `phpbb_forums` where `forum_id` = '$fid'";$result = mysql_query($sql) or die(mysql_error());$row = mysql_fetch_row($result); echo "<url>\n"; echo " <loc>${domain_root}viewforum.php?f=" . $fid . "</loc>\n"; echo " <changefreq>hourly</changefreq>\n"; echo "</url>\n";// Forums with more that 1 Page if ( $row['forum_topics_approved'] > $row['forum_topics_per_page'] ) { $pages = $row['forum_topics_approved'] / $row['forum_topics_per_page']; for ($i = 1; $i < $pages; $i++) { $s = $s + $row['forum_topics_per_page']; echo '<url>'. "\n"; echo ' <loc>' . $domain_root . 'viewforum.php?f=' . $fid . '&start=' . $s . '</loc>'. "\n"; echo ' <changefreq>hourly</changefreq>'. "\n"; echo '</url>'. "\n"; } }$sql = 'SELECT t.topic_title, t.topic_posts_approved, t.topic_last_post_id, t.forum_id, t.topic_type, t.topic_id, p.post_time, p.post_id FROM `' . TOPICS_TABLE . '` as `t`, `' . POSTS_TABLE . '` as `p` WHERE t.forum_id = '.$fid.' AND p.post_id = t.topic_last_post_id ORDER BY t.topic_type DESC, t.topic_last_post_id DESC';$result = mysql_query($sql) or die(mysql_error());while ($data = mysql_fetch_array($result)) { // Topics echo '<url>'. "\n"; echo ' <loc>'. $domain_root . 'viewtopic.php?f=' . $fid . '&t=' . $data['topic_id'] . '</loc>'. "\n"; echo ' <lastmod>'.date('Y-m-d', $data['post_time']),'</lastmod>'. "\n"; echo '</url>'. "\n";// Topics with more that 1 Page if ( $data['topic_replies'] > $row['forum_topics_per_page'] ) { $s = 0; $pages = $data['topic_replies'] / $row['forum_topics_per_page']; for ($i = 1; $i < $pages; $i++) { $s = $s + $config['posts_per_page']; echo '<url>'. "\n"; echo ' <loc>'. $domain_root . 'viewtopic.php?f=' . $fid . '&t=' . $data['topic_id'] . '&start=' . $s . '</loc>'. "\n"; echo ' <lastmod>'.date('Y-m-d', $data['post_time']),'</lastmod>'. "\n"; echo '</url>'. "\n"; } } } echo '</urlset>'; } else { // overall sitemap index echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; echo '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n"; $sql = 'SELECT * from `phpbb_forums`'; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_array($result)) { echo '<sitemap>' . "\n"; echo '<loc>'. $domain_root . 'sitemap.php?fid=' . $row['forum_id'] . '</loc>' . "\n"; echo '</sitemap>'. "\n"; } echo '</sitemapindex>'; } ?>