[opencms-dev] cms:parse tag usage

Claus Priisholm cpr at codedroids.com
Wed Sep 10 15:26:41 CEST 2008


Hi

Nope - I looked at the decorate tag at one point, but it did not do what 
I wanted. But I was having problems catching the output from the include 
tag similar to what you describe, until someone hinted me that I should 
disable the cache. And it did the trick - a simple way of testing if you 
get what you expect:

<c:set var="stuff"><cms:include ... /></c:set>

and then check

pageContext.getAttribute("stuff")

But before I got so far I implemented a tomcat filter to do the job 
instead. There I am using org.htmlparser.Parser to do the work for me:

Parser parser = Parser.createParser(source, encoding);
NodeList nl = parser.parse(null);

Html root = null;
for(int i = 0; i< nl.size(); i++) {
	if(nl.elementAt(i) instanceof Html) {
		root = (Html)nl.elementAt(i);
		break;
	}
}

NodeList list = root.searchFor(LinkTag.class, true);

...and so forth.

Other options could be JTidy or NekoHTML to do the parsing. Seem to 
recall that HTMLParser wants your document to start with <html> and not 
be a partial document.

Olli Aro wrote:
> Hi Claus,
> 
> Have you ever used cms:parse tag? Do you know how it should work and how to
> write a custom parser?
> 
> I created my own test parser as direct copy of
> org.opencms.util.CmsHtmlParser and still don't get any content through, so
> maybe I am doing something wrong.
> 
> Regards,
> 
> Olli
> 
> -----Original Message-----
> From: Claus Priisholm [mailto:claus.priisholm at gmail.com] On Behalf Of Claus
> Priisholm
> Sent: 09 September 2008 14:38
> To: olli_aro at yahoo.co.uk; The OpenCms mailing list
> Subject: Re: [opencms-dev] need some help on customizing the <cms:link> tag
> 
> What I ran into once I was trying to capture output from the include-tag 
> was that if it is cached, the only output your tag get to see is 
> something that looks like 32 bit ident... So to catch the output of 
> those tags that supports the flex cache you must set "cacheable" to 
> false (on the include tag).
> 
> Olli Aro wrote:
>> Ok, added some debugging info to my parser class and it looks that that
> one
>> is getting called ok with the following tag:
>>
>> <cms:parse parserClass="myClassName" param="config">
>> 		<cms:include element="body" editable="true" />
>> </cms:parse>
>>
>> So, it must be that I have something wrong with my parser implementation.
>> Maybe I will create a copy of org.opencms.util.CmsHtmlParser and take it
>> from there... But still if anyone do have custom parser class for me to
> show
>> that would be very useful :)
>>
>> Regards,
>>
>> Olli
>>
>> -----Original Message-----
>> From: opencms-dev-bounces at opencms.org
>> [mailto:opencms-dev-bounces at opencms.org] On Behalf Of Olli Aro
>> Sent: 09 September 2008 12:41
>> To: 'The OpenCms mailing list'
>> Subject: Re: [opencms-dev] need some help on customizing the <cms:link>
> tag
>> Hi Michael,
>>
>> Do you have example usage for <cms:parse> tag? How to use it in template
> and
>> what is the best way to implement your own parser? Also, if you would have
> a
>> sample custom parser class that would be very useful.
>>
>> I tried to use it with extending org.opencms.util.CmsHtmlParser, returning
>> this as my own implementation of
>> org.opencms.jsp.parse.A_CmsConfiguredHtmlParser and then doing:
>>
>> <cms:parse parserClass="myClassName" param="config">
>> 		<cms:include element="body" editable="true" />
>> </cms:parse>
>>
>> but that did not render anything for the content.
>>
>> Regards,
>>
>> Olli
>>
>> -----Original Message-----
>> From: opencms-dev-bounces at opencms.org
>> [mailto:opencms-dev-bounces at opencms.org] On Behalf Of Michael Emmerich
>> Sent: 04 September 2008 16:26
>> To: The OpenCms mailing list
>> Subject: Re: [opencms-dev] need some help on customizing the <cms:link>
> tag
>> Kunkun,
>>
>>> Hi Kunkun,
>>>  
>>> for the first part of your question you can possibly use the 
>>> <cms:decorate>-Tag. For further details have a look at the 
>>> OpenCms-Documentation Modules.
>> the <cms:decorate> tag only modified text nodes, this would not help.
>>
>> Use the <cms:parse> tag and write your own parser that is triggered by 
>> link tags. Modifiy the link tags with the id, e.g. the hash code of the 
>> target and write this into a database.
>> Sonthing that holds the id, the target and the number of hits.
>> In addition add some code to your link that starts a ajax request when 
>> the link is klicked. The target of this ajax reqeust must receive the id 
>> and increase the number of hits for this id.
>>
>> HTH,
>> Michael
>>
>>
>>> ------------------------------------------------------------------------
>>> *Von:* opencms-dev-bounces at opencms.org 
>>> [mailto:opencms-dev-bounces at opencms.org] *Im Auftrag von *kk
>>> *Gesendet:* Donnerstag, 4. September 2008 16:58
>>> *An:* opencms-dev at opencms.org
>>> *Betreff:* [opencms-dev] need some help on customizing the <cms:link> tag
>>>
>>> Dear together,
>>>  
>>> my name is kunkun. I am a computerscience-student in Germany. I am 
>>> working on a project, which extends opencms with some new features.
>>>  
>>> The problem is:
>>>  
>>> 1. I have to mark the links, that i create on a site, with something 
>>> like an ID.
>>> 2. Then i have to log the Link ID, whenever the link is clicked on the 
>>> site, when it is made online.
>>>  
>>> Can u give me some Ideas, how to do that?
>>>  
>>> My idea is to create a class, which inherits the internal link class of 
>>> OpenCms, and change the html-code that is generated during constuction 
>>> of the link.
>>>  
>>> But with which class should I start. There is a class named 
>>> CmsJspTagLink, which can be used with <cms:link>.
>>> The class CmsLinkManager is also used to substitute the name for links 
>>> inside the VFS System. But how do i do
>>> it in general purpose not only for internal links?
>>>  
>>> I am looking for some ideas asap.
>>>  
>>> Thank u very much.
>>>  
>>> Kunkun
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>>
>>> _______________________________________________
>>> This mail is sent to you from the opencms-dev mailing list
>>> To change your list options, or to unsubscribe from the list, please
> visit
>>> http://lists.opencms.org/mailman/listinfo/opencms-dev
> 

-- 
Claus Priisholm, CodeDroids ApS
Phone: +45 48 22 46 46
cpr (you know what) codedroids.com - http://www.codedroids.com
cpr (you know what) interlet.dk - http://www.interlet.dk
-- 
Javadocs and other OpenCms stuff: 
http://www.codedroids.com/community/opencms



More information about the opencms-dev mailing list