Google sitemaps index added to WebGUI

This commit is contained in:
Frank Dillon 2008-11-04 15:58:04 +00:00
parent 83bb3c1904
commit 293e1c0e47
2 changed files with 126 additions and 0 deletions

View file

@ -39,6 +39,7 @@ addProfileExtrasField($session);
addWorkflowToDataform( $session );
installDataTableAsset( $session );
installAjaxI18N( $session );
installSiteIndex( $session );
finish($session); # this line required
#----------------------------------------------------------------------------
@ -85,6 +86,27 @@ sub installAjaxI18N {
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
# installSiteIndex
# Install the content handler by adding it to the config file
sub installSiteIndex {
my $session = shift;
print "\tInstalling the SiteIndex content handler... " unless $quiet;
my $oldHandlers = $session->config->get( "contentHandlers" );
my @newHandlers;
for my $handler ( @{ $oldHandlers } ) {
if ( $handler eq "WebGUI::Content::Asset" ) {
push @newHandlers, "WebGUI::Content::SiteIndex";
}
push @newHandlers, $handler;
}
$session->config->set( "contentHandlers", \@newHandlers );
print "DONE!\n" unless $quiet;
}
#----------------------------------------------------------------------------
sub upgradeToYui26 {
my $session = shift;

View file

@ -0,0 +1,104 @@
package WebGUI::Content::SiteIndex;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2008 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
use WebGUI::Asset;
use XML::Simple;
=head1 NAME
Package WebGUI::Content::SiteIndex
=head1 DESCRIPTION
A content handler that displays a google site index making it easier and faster
for search engines to index a website.
=head1 SYNOPSIS
use WebGUI::Content::SiteIndex;
my $output = WebGUI::Content::SiteIndex::handler($session);
=head1 SUBROUTINES
These subroutines are available from this package:
=cut
#-------------------------------------------------------------------
=head2 handler ( session )
The content handler for this package.
=cut
sub handler {
my $session = shift;
my $p = $session->url->page();
unless ($p =~ m/siteindex\.xml/i) {
return undef;
}
my $pages = WebGUI::Asset->getRoot($session)->getLineage(["self","descendants"],{
returnObjects => 1,
includeOnlyClasses => ["WebGUI::Asset::Wobject::Layout"],
whereClause => "assetData.groupIdView = 7",
limit => 20000
});
my $url = [];
foreach my $page (@{$pages}) {
push(@{$url},{
loc => $session->url->getSiteURL().formatXML($page->getUrl),
lastmod => $session->datetime->epochToSet($page->get("revisionDate")),
});
}
my $xmlStructure = { url => $url };
my $xml =
'<?xml version="1.0" encoding="UTF-8"?>'
.'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
. XMLout( $xmlStructure,
NoAttr => 1,
KeepRoot => 1,
KeyAttr => ["url"],
)
.'</urlset>';
$session->http->setMimeType('text/xml');
return $xml;
}
#-------------------------------------------------------------------
sub formatXML {
my $content = shift;
$content =~ s/&/&amp;/g;
$content =~ s/\</&lt;/g;
$content =~ s/\>/&gt;/g;
$content =~ s/'/&apos;/g;
$content =~ s/"/&quot;/g;
return $content;
}
1;