I had very painfull installtion because of how gsmap function was dealing link categories.
which goes in systems/custom directory (unless you have some other way of using it.)
Text Formatted Code
<?php
// +---------------------------------------------------------------------------+
// | Google Sitemap Generator 0.1.3 for Geeklog - The Ultimate Weblog |
// +---------------------------------------------------------------------------+
// | phpblock_gsmap.php |
// | |
// +---------------------------------------------------------------------------+
// | Copyright (C) 2006 by the following authors: |
// | |
// | Authors: mystral-kk - geeklog AT mystral-kk DOT net |
// +---------------------------------------------------------------------------+
// | |
// | 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. |
// | |
// | This program is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// | GNU General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public License |
// | along with this program; if not, write to the Free Software Foundation, |
// | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
// | |
// +---------------------------------------------------------------------------+
//
// $Id$
// This script creates a sitemap for your site based on "Sitemaps XML format"
// published at sitemaps.org (http://www.sitemaps.org). The sitemap is valid
// as a Google sitemap.
// ==============================================
// SETTINGS
// ==============================================
$GSMAP_CONF = array();
// The path to the sitemap file. This file must be in the TOP DIRECTORY of
// your site and WRITABLE FROM THE WEB SERVER.
$GSMAP_CONF['sitemap_name'] = 'sitemap.xml';
// Items to be included into the sitemap (true = include / false = exclude)
$GSMAP_CONF['include_story'] = true;
$GSMAP_CONF['include_staticpage'] = true;
$GSMAP_CONF['include_link'] = true;
$GSMAP_CONF['include_forum_topic'] = true;
// What type of static pages to be included into the sitemap
// 0 = all pages
// 1 = only pages to be displayed in the center block
// 2 = only pages ** NOT ** not to be displayed in the center block (default)
$GSMAP_CONF['staticpage_type'] = 2;
// ============================================================================
// DO NOT MODIFY THE LINES BELOW UNLESS YOU KNOW WHAT YOU ARE GOING TO DO
// ============================================================================
if ( !defined( 'LB' ) )
{
define( 'LB', "\n" );
}
// @para: $t = UNIX Timestamp
// @return: string - 'YYYY-MM-DD'
function GSMAP_formatTime( $t )
{
return date( 'Y-m-d', $t );
}
function GSMAP_checkURL( $url )
{
$url = str_replace( '&', '&', $url );
$url = htmlspecialchars( $url, ENT_QUOTES ); // '&' -> '&'
return $url;
}
function GSMAP_makeEntry( $url, $lastmod )
{
$retval = '<url>' . LB;
$retval .= '<loc>' . GSMAP_checkURL( $url ) . '</loc>' . LB;
$retval .= '<lastmod>' . GSMAP_formatTime( $lastmod ) . '</lastmod>' . LB;
$retval .= '</url>' . LB;
return $retval;
}
// Return stories
function GSMAP_getStory()
{
global $_CONF, $_TABLES, $GSMAP_CONF;
$retval = '';
if ( !$GSMAP_CONF['include_story'] )
{
return $retval;
}
$sql = "SELECT sid, date FROM {$_TABLES['stories']} WHERE (date <= NOW()) AND (draft_flag = 0) AND (perm_anon >= 2) ORDER BY date DESC";
$result = DB_query( $sql );
$baseurl = $_CONF['site_url'] . '/article.php';
while ( $A = DB_fetchArray( $result ) )
{
$lastmod = strtotime( $A['date'] );
if ( $_CONF['url_rewrite'] )
{
$url = $baseurl . '/';
}
else
{
$url = $baseurl . '?story=';
}
$url .= $A['sid'];
$retval .= GSMAP_makeEntry($url, $lastmod);
}
return $retval;
}
// Return static pages
function GSMAP_getStaticPage()
{
global $_CONF, $_PLUGINS, $_TABLES, $GSMAP_CONF;
$retval = '';
if ( !$GSMAP_CONF['include_staticpage'] || !in_array( 'staticpages', $_PLUGINS ) )
{
return $retval;
}
// Set up which type of static pages to pick up
if ( !isset( $GSMAP_CONF['staticpage_type'] ) )
{
$GSMAP_CONF['staticpage_type'] = 0;
}
$sql = "SELECT sp_id, sp_date FROM {$_TABLES['staticpage']} WHERE ";
if ( $GSMAP_CONF['staticpage_type'] == 1 )
{
$sql .= "(sp_centerblock <> 0) AND ";
}
else if ( $GSMAP_CONF['staticpage_type'] == 2 )
{
$sql .= "(sp_centerblock = 0) AND ";
}
$sql .= "(perm_anon >= 2) ORDER BY sp_date DESC";
$result = DB_query( $sql );
$baseurl = $_CONF['site_url'] . '/staticpages/index.php';
while ( $A = DB_fetchArray( $result ) )
{
$lastmod = strtotime( $A['sp_date'] );
if ( $_CONF['url_rewrite'] )
{
$url = $baseurl . '/';
}
else
{
$url = $baseurl . '?page=';
}
$url .= $A['sp_id'];
$retval .= GSMAP_makeEntry( $url, $lastmod );
}
return $retval;
}
// Return links
function GSMAP_getLink()
{
global $_CONF, $_PLUGINS, $_TABLES, $GSMAP_CONF;
$retval = '';
if ( !$GSMAP_CONF['include_link'] || !in_array( 'links', $_PLUGINS ) )
{
return $retval;
}
// Retrieve categories and their last modified dates
$cats = array();
$sql = "SELECT lid, cid, date FROM {$_TABLES['links']} WHERE (perm_anon >= 2)";
$result = DB_query( $sql );
while ( $A = DB_fetchArray( $result ) )
{
$category = $A['cid'];
$lastmod = strtotime($A['date']);
if ( !in_array( $category, $cats ) )
{
$cats[$category] = $lastmod;
}
else
{
if ( $cats[$category] < $lastmod )
{
$cats[$category] = $lastmod;
}
}
}
foreach ( $cats as $cat => $lastmod )
{
$url = $_CONF['site_url'] . '/links/index.php?category=' . urlencode( $cat );
$retval .= GSMAP_makeEntry( $url, $lastmod );
}
return $retval;
}
// Return forum topics
function GSMAP_getForumTopic()
{
global $_CONF, $_PLUGINS, $_TABLES, $GSMAP_CONF;
$retval = '';
if ( !$GSMAP_CONF['include_forum_topic'] || !in_array( 'forum', $_PLUGINS ) )
{
return $retval;
}
// Collect ids of forums open to all users (grp_id = 2)
$sql = "SELECT forum_id FROM {$_TABLES['gf_forums']} WHERE ( grp_id = 2 )";
$result = DB_query( $sql );
$forum_ids = array();
while ( $A = DB_fetchArray( $result ) )
{
$forum_ids[] = $A['forum_id'];
}
$sql = "SELECT id, forum, lastupdated FROM {$_TABLES['gf_topic']}"
. " WHERE ( pid = 0 ) AND ( forum in ( " . implode(',', $forum_ids) . " ) )";
$result = DB_query( $sql );
while ( $A = DB_fetchArray( $result ) )
{
$url = $_CONF['site_url'] . '/forum/viewtopic.php?forum=' . $A['forum'] . '&showtopic=' . $A['id'];
$retval .= GSMAP_makeEntry( $url, $A['lastupdated'] );
}
return $retval;
}
// Create a sitemap for your site based on "Sitemaps XML format" published at
// sitemaps.org (http://www.sitemaps.org).
function phpblock_gsmap()
{
global $_CONF, $_PLUGINS, $_TABLES, $GSMAP_CONF;
// Header
$gsmap = '<?xml version="1.0" encoding="UTF-8"?>' . LB;
$gsmap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . LB;
// Collect contents
$gsmap .= GSMAP_getStory();
$gsmap .= GSMAP_getStaticPage();
$gsmap .= GSMAP_getLink();
$gsmap .= GSMAP_getForumTopic();
// Footer
$gsmap .= '</urlset>' . LB;
// Convert carriage returns and encode the stuff in UTF-8N
$gsmap = str_replace( array( "\r\n", "\n\r", "\r" ), "\n", $gsmap );
if ( function_exists( 'mb_convert_encoding' ) )
{
$gsmap = mb_convert_encoding( $gsmap, 'UTF-8' );
}
// Write the sitemap into file
$path = $_CONF['path_html'] . $GSMAP_CONF['sitemap_name'];
if ( file_exists( $path ) && !is_writable( $path ) )
{
@chmod( $path, 0666 );
}
clearstatcache();
$fh = fopen( $path, "wb" );
if ( $fh !== false )
{
$bytes = fwrite( $fh, $gsmap );
if ( $bytes === false || $bytes != strlen( $gsmap ) )
{
COM_errorLog( "GSMAP: couldn't write into the sitemap.\nPath: " . $_CONF['path_html'] . $GSMAP_CONF['sitemap_name'] );
}
@fclose( $fh );
@touch( $path );
@chmod( $path, 0644 );
}
else
{
COM_errorLog( "GSMAP: couldn't open the sitemap for writing data.\nPath: " . $_CONF['path_html'] . $GSMAP_CONF['sitemap_name'] );
}
}
?>