A More Complete Example
Here is a more complete iterate
tag, which
renders all types of menu items:
<MENU:iterate id="currentObject" menu="<%=menu%>" currentSectionID="<%= sec.getId() %>"> <MENU:sectionView> <a class="section" href='<BEAN:write name="url"/>'> <BEAN:write name="text"/> </a> </MENU:sectionView> <MENU:articleView> <a class="article" href='<BEAN:write name="url"/>'> <BEAN:write name="text"/> </a> </MENU:articleView> <MENU:urlView> <a href='<BEAN:write name="url"/>'> <BEAN:write name="text"/> </a> </MENU:urlView> <MENU:spaceView> <BEAN:write name="text"/> </MENU:spaceView> </MENU:iterate>
This example is still, however, very simple. It renders links and
sets the HTML class attributes to appropriate values for each menu item
type, but does not do much more. The sectionView
,
articleView
, urlView
and
spaceView
tags all have a number of attributes that
can be used in various ways.
You can also directly access the object referenced by the menu
item, by using the currentObject
variable exposed by
the iterate
tag. For a section, the
currentObject
is a SectionItem
,
which has direct access to the section:
<MENU:sectionView> <a href='<BEAN:write name="url"/>' class="<BEAN:write name="currentObject" property="section.parameter(menuclass)"/>"> <BEAN:write name="text"/> </a> </MENU:sectionView>
The property called
section.parameter(menuclass)
retrieves the section
parameter called 'menuclass' from each section in the menu. This way,
the top level section could define a default value, and entire section
trees could be configured to a different value.
Here is another example that uses the information in a content item field to enrich the menu.
<%@ taglib uri="http://www.escenic.com/taglib/escenic-article" prefix="article"%> <MENU:articleView> <BEAN:define id="articleItem" name="currentObject" type="com.escenic.menu.ArticleItem" /> <a class="article" href='<BEAN:write name="url"/>'> <BEAN:write name="text"/> </a> <ARTICLE:use articleId="<%=articleItem.getArticleId()%>"> <ARTICLE:field field="menutext"/> </ARTICLE:use> </MENU:articleView>
In this example, the content item's menutext
field is retrieved. However, the same method could be used to retrieve
related images or an icon. The menu could even be expanded to include
related content items.