Sitemap pro phpBB 3.1+

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 . '&amp;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>';
 }
 ?>

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *