[opencms-dev] OpenCMS / Google Sitemap generation script

Arash Kaffamanesh arash.kaffamanesh at pomegranate.de
Fri Oct 7 12:40:29 CEST 2005


 Hi Tim,
 
thanx, yes the readPropertyObject seems to be new in 6.0. I changed the
lines as you suggested, but now I'm getting:
 
A CMS exception occurred:
org.opencms.file.CmsVfsResourceNotFoundException:
[org.opencms.db.mysql.CmsVfsDriver.readResource/3]
/sites/master/opencms/opencms/favicon.ico Resource not found!
 
Please don't waste any time, I will uprgade to 6.0 final definitely this
weekend.
 
Thanks again,
Arash

-----Original Message-----
From: Tim Howland [mailto:thowland at gmail.com] 
Sent: Freitag, 7. Oktober 2005 01:12
To: Arash Kaffamanesh
Subject: Re: [opencms-dev] OpenCMS / Google Sitemap generation script


Interesting- the javadocs for 6.0 Final definitely seem to have it- I'll
put a note on my site flagging that it won't work in B3.

You might try changing these lines:

CmsProperty secret = cmso.readPropertyObject(f,"sitemap_hidden",true);
CmsProperty changeFreqProperty =
cmso.readPropertyObject(f,"sitemap_change_frequency",true);
CmsProperty priorityProperty =
cmso.readPropertyObject(f,"sitemap_priority",true);

to

CmsProperty secret =
cmso.readPropertyObject(thispath,"sitemap_hidden",true);
CmsProperty changeFreqProperty =
cmso.readPropertyObject(thispath,"sitemap_change_frequency",true);
CmsProperty priorityProperty =
cmso.readPropertyObject(thispath,"sitemap_priority",true);



This may not work; I'm not sure if readPropertyObject is in 6b3; all the
older ReadProperty methods are listed as deprecated, but I'm not sure
when they flagged them. I used the Resource object as the javadocs say
it's much faster- I was worried about performance on big sites.



Good luck with the upgrade!

Tim

Arash Kaffamanesh wrote: 

 Hi Tim,
 
I'm getting this error on OpenCms 6 Beta 3 (I guess it works on 6.0
final, I'll try it on 6.0 after upgrading from Beta3 and let you know
how it works, thanks for the contribution):
 
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 7 in the jsp file:
/WEB-INF/jsp/offline/sites/master/en/google_site_map.jsp
Generated servlet error:
The method readPropertyObject(String, String, boolean) in the type
CmsObject is not applicable for the arguments (CmsFile, String, boolean)
 
Kind Regards,
Arash

-----Original Message-----
From: opencms-dev-bounces at opencms.org
[mailto:opencms-dev-bounces at opencms.org] On Behalf Of Tim Howland
Sent: Donnerstag, 6. Oktober 2005 18:40
To: opencms-dev at opencms.org
Subject: [opencms-dev] OpenCMS / Google Sitemap generation script


Hey folks-

I wrote the following jsp page to generate XML sitemaps that Google can
read (see http://www.google.com/webmasters/sitemaps/docs/en/faq.html ).

Basically, it recurses through your site tree and pulls out any jsp,
html, or pdf files it finds, generating a link in Google's format so
they can locate the file.

It also looks for three custom properties- these properties can be set
at the folder level, they will cascade to all files and subfolders
below.



*	sitemap_hidden (default value: false): set this to "true" to
hide something from this script. I use it to hide client extranets and
include files. 

*	sitemap_change_frequency (default value: weekly): controls how
often google should check for an update of this element. Legal values
are:   always,  hourly, daily, weekly, monthly, yearly, never . 

*	sitemap_priority (default value: 1): the relative priority of
this element. Should be an integer. 


Here's the script- improvements and comments are welcome, of course:


<%@ page session="false" %>

<%@ page
import="java.util.*,org.opencms.jsp.*,org.opencms.file.*,java.text.DateF
ormat, java.text.SimpleDateFormat, org.opencms.main.*" %>

<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms"
<http://www.opencms.org/taglib/cms>  %>

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"
<http://java.sun.com/jstl/core>  %>

<?xml version="1.0" encoding="UTF-8" ?>

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"
<http://www.google.com/schemas/sitemap/0.84> >

<%!

protected String BASE_URL="";

public static SimpleDateFormat ISO8601FORMAT = new
SimpleDateFormat("yyyy-MM-dd");

private String recurseTree(CmsObject cmso,CmsJspActionElement jsp,
String path)  {

	StringBuffer sb = new StringBuffer();

	try {

		ArrayList files = (ArrayList)
cmso.getFilesInFolder(path);

		Iterator i = files.iterator();

		while (i.hasNext()) {

			CmsFile f = (CmsFile) i.next();	

			String thispath = jsp.link(cmso.getSitePath(f));

			CmsProperty secret =
cmso.readPropertyObject(f,"sitemap_hidden",true);

			CmsProperty changeFreqProperty =
cmso.readPropertyObject(f,"sitemap_change_frequency",true);

			CmsProperty priorityProperty =
cmso.readPropertyObject(f,"sitemap_priority",true);

			String changeFrequency =
changeFreqProperty.getValue("weekly");

			String priority =
priorityProperty.getValue("1");

			if ((secret.getValue("false") == "false") 

				&&
(thispath.endsWith("html")||thispath.endsWith("jsp")||thispath.endsWith(
"pdf"))) {		

				sb.append("<url>\n");			

	
sb.append("<loc>"+BASE_URL+thispath+"</loc>\n");

				//DateFormat df =
DateFormat.getDateInstance();

				String niceDate =
ISO8601FORMAT.format(new Date(f.getDateLastModified()));

	
sb.append("<lastmod>"+niceDate+"</lastmod>\n");

	
sb.append("<changefreq>"+changeFrequency+"</changefreq>\n");

	
sb.append("<priority>"+priority+"</priority>\n");

				sb.append("</url>\n");

			}

		}

		ArrayList folders = (ArrayList)
cmso.getSubFolders(path);

		Iterator j = folders.iterator();	

		while (j.hasNext()) {

			CmsFolder f = (CmsFolder) j.next();

			sb.append( recurseTree(cmso,jsp,
cmso.getSitePath(f) ) );

		}

	}

	catch (CmsException cmsException) {

		sb.append("A CMS exception occurred:
"+cmsException.toString());

	

	}

	return sb.toString();



}



%>

<%



CmsJspActionElement cms = new
org.opencms.jsp.CmsJspActionElement(pageContext, request, response);

CmsObject cmso = cms.getCmsObject();

String url = cms.info("opencms.url");

int lastSlash = url.indexOf("/",8);

BASE_URL = url.substring(0,lastSlash);

out.println (recurseTree(cmso,cms, "/"));

%> 

</urlset>

    
You can download it (plus a readme file with slightly more info) from
http://www.wdogsystems.com/opencms/opencms/downloads/index.jsp .
Tim

-- 

 Tim Howland

 Watchdog Systems, LLC

 (978) 225-8494

 http://wdogsystems.com

    



-- 

 Tim Howland

 Watchdog Systems, LLC

 (978) 225-8494

 http://wdogsystems.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://webmail.opencms.org/pipermail/opencms-dev/attachments/20051007/d8c924a4/attachment.htm>


More information about the opencms-dev mailing list