You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs@cocoon.apache.org by Apache Wiki <wi...@apache.org> on 2005/06/26 02:01:47 UTC
[Cocoon Wiki] Update of "cmnogueira" by cmnogueira
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Cocoon Wiki" for change notification.
The following page has been changed by cmnogueira:
http://wiki.apache.org/cocoon/cmnogueira
New page:
== CFORMS: Dinamically display radio buttons on a table ==
- TARGET-AUDIENCE: '''*advanced*''' [[BR]]
- COCOON-RELEASES: 2.1.7[[BR]]
- DOCUMENT-STATUS: '''*draft*''' reviewed released[[BR]]
----
=== What you will get from this page ===
A piece of code that can dramatically ease the use of radio buttons on a cforms page.
=== Your basic skills ===
Take a while to understand how cforms various actions example work.
XSL knowledge is also necessary to understand the code i wrote.
=== Technical prerequisites ===
All the xsl files under cocoon\samples\blocks\forms\resources.
At least the following xml files under cocoon\samples\blocks\forms\
form1.xml
form1_template_action.xml
Later you can remove the ones you don't wan't to use.
--------------------------------------------------------
As you might have noticed the current xsl provided with the cforms example is quite limited.
I needed to display something like this:
||radiobutton1||radiobutton2||radiobutton3||
||radiobutton4||radiobutton5||radiobutton6||
To achieve this efect follow these steps:
1. Edit forms-field-styling.xsl
1.1 Inside this file look for this line
{{{
<xsl:template match="fi:field[fi:selection-list][fi:styling/@list-type='radio']" priority="2">
}}}
1.2 Add the following variable line
{{{
<xsl:variable name="column" select="number(fi:styling/@column)"/>
}}}
1.3 Look for the <xsl:otherwise>. Replace this hole section with this code
{{{
<xsl:otherwise>
<xsl:call-template name="produceColumns">
<xsl:with-param name="nos" select="fi:selection-list/fi:item"/>
<xsl:with-param name="id" select="$id"/>
<xsl:with-param name="value" select="$value"/>
<xsl:with-param name="column" select="$column"/>
</xsl:call-template>
</xsl:otherwise>
}}}
1.4 Create the template produceColumns with the following code
{{{
<xsl:template name="produceColumns">
<xsl:param name="nodes"/>
<xsl:param name="id"/>
<xsl:param name="value"/>
<xsl:param name="column"/>
<xsl:variable name="elements" select="count($nodes)"/>
<tr>
<xsl:for-each select="$nodes">
<xsl:variable name="temp" select="($elements)-(count(following-sibling::*))"/>
<td>
<input type="radio" id="{generate-id()}" name="{$id}" value="{@value}">
<xsl:if test="@value = $value">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="../.." mode="styling"/>
</input>
<xsl:apply-templates select="." mode="label">
<xsl:with-param name="id" select="generate-id()"/>
</xsl:apply-templates>
</td>
<xsl:if test="($temp mod $column)=0">
<xsl:call-template name="produceColumns">
<xsl:with-param name="nos" select="descendant::fi:item"/>
<xsl:with-param name="id" select="$id"/>
<xsl:with-param name="value" select="$value"/>
<xsl:with-param name="column" select="$column"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</tr>
</xsl:template>
}}}
2. Edit form1.xml declare the following widget:
{{{
<fd:field id="test">
<fd:label>
this is a test
</fd:label>
<fd:datatype base="string"/>
<fd:selection-list>
<fd:item value="radiobutton1"/>
<fd:item value="radiobutton2"/>
<fd:item value="radiobutton3"/>
<fd:item value="radiobutton4"/>
<fd:item value="radiobutton5"/>
<fd:item value="radiobutton6"/>
</fd:selection-list>
</fd:field>
}}}
3. Edit form1_template_action.xml declare the use of the previous widget where you think
is more convenient for you:
{{{
<table border="0">
<ft:widget id="test">
<fi:styling list-type="radio" list-orientation="horizontal" column="3"/>
</ft:widget>
</table>
}}}
4. Voilá! This should now produce a table with 3 columns. As you have 6 radiobuttons,
the number of lines will be determined by (6 items/3 columns) = 2 lines.
||radiobutton1||radiobutton2||radiobutton3||
||radiobutton4||radiobutton5||radiobutton6||
=== page metadata ===
- AUTHOR:CarlosMiguelNogueira[[BR]]
- AUTHOR-CONTACT: mailto:cmsbn@student.dei.uc.pt[[BR]]
- REVIEWED-BY:[[BR]]
- REVIEWER-CONTACT:[[BR]]