I have tried the one below, seemed simple enough, but its not complete and not intended for live forum use, which make its somewhat useless. The output isnt working quite right, or so it seems, anyone else found something suitable?
I was going to contact the original author, or at least check by his site, but at least for now, the site is down. I will have a tinker with the code later if i get some time, see whats going on.
- Code: Select all
<?php
/**
*
* @author Tobi Schäfer http://www.seo-phpbb.org/
*
* @package phpBB3
* @version $Id: google-sitemap.php V0.1.1 2007-08-30 23:54:18 tas2580 $
* @copyright (c) 2005 phpBB Group; 2006 phpBB.de
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
$domain_root = 'http://www.YOUR-DOMAIN.TLD/'; // Edit here
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.'.$phpEx);
$user->session_begin();
$auth->acl($user->data);
if (is_numeric($_GET['fid'])) {
$fid = $_GET['fid'];
}
echo header('Content-Type: text/xml; charset=utf-8');
if (isset($fid)) {
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
echo '<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">'."\n";
$sql = 'SELECT forum_topics, forum_id, forum_name FROM ' . FORUMS_TABLE . ' WHERE forum_id = "'. (int) $fid.'"';
$result = $db->sql_query($sql);
$forum_data = $db->sql_fetchrow($result);
// Forums
echo '<url>'. "\n";
echo ' <loc>' . $domain_root . 'viewforum.' . $phpEx . '?f=' . $forum_data['forum_id'] . '</loc>'. "\n";
echo ' <changefreq>hourly</changefreq>'. "\n";
echo '</url>'. "\n";
// Forums with more that 1 Page
if ( $forum_data['forum_topics'] > $config['topics_per_page'] )
{
$pages = $forum_data['forum_topics'] / $config['topics_per_page'];
for ($i = 1; $i < $pages; $i++)
{
$s = $s + $config['topics_per_page'];
echo '<url>'. "\n";
echo ' <loc>' . $domain_root . 'viewforum.' . $phpEx . '?f=' . $forum_data['forum_id'] . '&start=' . $s . '</loc>'. "\n";
echo ' <changefreq>hourly</changefreq>'. "\n";
echo '</url>'. "\n";
}
}
if ($forum_data['forum_id'] == $fid) {
$sql = 'SELECT t.topic_title, t.topic_replies, t.topic_last_post_id, t.forum_id, t.topic_type, t.topic_id, p.post_time, p.post_id
FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' 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 = $db->sql_query($sql);
while ($data = $db->sql_fetchrow($result))
{
// Topics
echo '<url>'. "\n";
echo ' <loc>'. $domain_root . $forum_url . 'viewtopic.' . $phpEx . '?f=' . $forum_data['forum_id'] . '&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'] > $config['posts_per_page'] )
{
$s = 0;
$pages = $data['topic_replies'] / $config['posts_per_page'];
for ($i = 1; $i < $pages; $i++)
{
$s = $s + $config['posts_per_page'];
echo '<url>'. "\n";
echo ' <loc>'. $domain_root . $forum_url . 'viewtopic.' . $phpEx . '?f=' . $forum_data['forum_id'] . '&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
{
echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
echo ' <sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">'."\n";
$sql = 'SELECT forum_id FROM ' . FORUMS_TABLE;
$result = $db->sql_query($sql);
while($data = $db->sql_fetchrow($result))
{
if ($auth->acl_get('f_list', $data['forum_id']))
{
echo ' <sitemap>' . "\n";
echo ' <loc>'. $domain_root .'google-sitemap.php?fid='.$data['forum_id'].'</loc>'. "\n";
echo ' <changefreq>daily</changefreq>'. "\n";
echo ' </sitemap>'. "\n";
}
}
echo "\n".' </sitemapindex>';
}
?>
Come to think of it, has anyone come across a good xml site map generator for regular static sites? I have seen a couple only 1 is of use for sites over 500 pages, however it seems to disagree with my server and leaves my site offline for a while, not good.

: Maybe we should send you to a concentration camp.