Ich hatte für mein phpbb2 folgende php-Datei die mir eine Sitemap aus den ganzen Beiträgen vom Forum erstellt hat.
Code: Alles auswählen
<?php
/***************************************************************************
*
* Created: Thursday, June 9, 2005 (Second to last day of Uni!)
* Author: NeoThermic
* Modified: fanrpg
* Kortirion, Sunday, July 2, 2006
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
@set_time_limit(360);
ob_start();
define('IN_PHPBB', true);
$phpbb_root_path = 'phpbb/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
//for testing, just mod this to be the base URL of your forums.
$secure = $board_config['cookie_secure'] ? 'https://' : 'http://';
$baseURL = $secure.$board_config['server_name'].$board_config['script_path'];
//we do this for hosts that have short tags enabled...
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc><?php echo $baseURL; ?></loc>
<lastmod><?php echo date("Y-m-d"); ?></lastmod>
<changefreq>always</changefreq>
<priority>0.8</priority>
</url>
<?php
//we need to set up an array so that we can store the fourm_id's of any fourm that has a auth_view larger than 0
$hidtopic = array();
$sql = 'SELECT forum_id, forum_name, forum_desc, auth_read FROM '.FORUMS_TABLE.' ORDER BY forum_name';
if( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, "Could not query forum auth information", "", __LINE__, basedir(__FILE__), $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$forum_name = $row['forum_name'];
if ($row["auth_read"] < 1)
{
//note, we have the code de-tabbed like this to provide a cleaner output...
echo '
<url>
<loc>'.$baseURL.append_sid('viewforum.php?f='.htmlspecialchars($row["forum_id"])).'</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>';
}
else
{
//add fourm_id of the one here to an array
$hidtopic[]= $row["forum_id"]; //ok, we now have populated the array with the fourm_ID of the hidden topics
}
}
//ok, now we mod the below so that it reads fourm_id as well
$sql = "SELECT t.topic_title, t.topic_id, t.topic_replies, t.forum_id, p.post_time
FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
WHERE p.post_id = t.topic_last_post_id
ORDER BY p.post_time DESC";
if( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_ERROR, "Could not query topic information", "", __LINE__, basedir(__FILE__), $sql);
}
if( $db->sql_numrows($result) >= 50000 )
{
message_die(CRITICAL_MESSAGE, "Sitemap generated will be too large. Please modify file to make multiple sitemaps.");
}
$i = 0;
while($row = $db->sql_fetchrow($result))
{
if ($hidtopic[$i] != $row["forum_id"] && "17" != $row["forum_id"] && "23" != $row["forum_id"])
{
//if we get here, then the fourm_id of the post in question can be displaied...
//same tabbing reason as above
//Do tell thee, how many pages does one have?
$perpage = $board_config['posts_per_page'];
$numpages = intval($row['topic_replies']/$perpage);
if ($numpages == 0)
{
$topic_title = $row['topic_title'];
echo '
<url>
<loc>'.$baseURL.append_sid('viewtopic.php?t='.htmlspecialchars($row["topic_id"])).'</loc>';
if ((time() - $row['post_time']) < 2600000)
{
echo '
<lastmod>'.date('Y-m-d',$row['post_time']).'</lastmod>
<priority>0.8</priority>
</url>';
}
else
{
echo '
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>';
}
}
else
{
for ($j = 0; $j < ($numpages+1); $j++)
{
$topic_title = $row['topic_title'];
$start = $j * $perpage;
echo'
<url>
<loc>'.$baseURL.append_sid('viewtopic.php?t='.htmlspecialchars($row["topic_id"]).'&start='.$start).'</loc>';
if ((time() - $row['post_time']) < 2600000)
{
echo '
<lastmod>'.date('Y-m-d',$row['post_time']).'</lastmod>
<priority>0.8</priority>
</url>';
}
else
{
echo '
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>';
}
}
}
}
$i++;
}
$sql = "SELECT u.username, u.user_id FROM ".USERS_TABLE." u WHERE u.user_active = 1 AND u.user_active != '-1' ORDER BY u.user_id ASC";
$result = $db->sql_query($sql);
while( $row = $db->sql_fetchrow($result) )
{
echo'
<url>
<loc>'.$baseURL.append_sid('profile.php?mode=viewprofile&u='.htmlspecialchars($row['user_id'])).'</loc>
<changefreq>monthly</changefreq>
<priority>0.3</priority>
</url>';
}
?>
</urlset>
<?php
$xml = ob_get_contents();
ob_end_clean();
if( ($handle = fopen('/sitemap.xml', 'w')) )
{
fwrite($handle, $xml);
fclose($handle);
}
else
{
echo $xml;
}
?>
Oder gibt es diese schon irgendwo?
TomW