A while ago I created an extra template in my woody
(cforms) to show/not show a group of widgets if a checkbox is clicked. It may
give you something to begin with:
This template goes in your woody/cform stylesheet
or create your own stylesheet and let this stylesheet include the other
woody/cform stylesheets
<!--
wi:group of type checkboxGroup: changes display settings to none resp. block if previous was resp. block or none, thus flipping its display state --> <xsl:template match="wi:group[wi:styling/@type='checkboxGroup']"> <xsl:variable name="value" select="wi:state/wi:*/wi:value"/> <!-- copy the "state-widget" attribute for use in for-each --> <xsl:variable name="state-widget" select="wi:state/wi:*/@id"/> <xsl:variable name="id"
select="generate-id()"/>
<xsl:apply-templates select="wi:label/node()"/> <xsl:apply-templates select="text()"/> <input type="checkbox" name="{$state-widget}" > <xsl:if test="$value = 'true'"> <xsl:attribute name="checked">true</xsl:attribute> </xsl:if> </input> <xsl:if test="wi:items/*//wi:validation-message"> <span style="color:red; font-weight: bold"> ! </span> </xsl:if> <!-- a div for
each of the items -->
<xsl:for-each select="wi:items/wi:*"> <div id="{$id}_items_{position() - 1}"> <xsl:if test="not($value = @displayWhen)"> <xsl:attribute name="style">display:none</xsl:attribute> </xsl:if> <xsl:apply-templates select="."/> </div> </xsl:for-each> </xsl:template> Use this to show the checkbox
(template):
<wi:group>
<wi:styling type="checkboxGroup"/> <wt:widget-label id="state"/> <wi:state> <wt:widget-label id="state"/>: <wt:widget id="state"/> </wi:state> <wi:items> <wi:group displayWhen="false"> <wi:items> Name: <wt:widget id="name"/> </wi:items> </wi:group> </wi:items> </wi:group> definition:
<wd:booleanfield
id="state">
<wd:label>Do you want to give your name?</wd:label> </wd:booleanfield> <wd:field id="name"> <wd:datatype base="string"/> </wd:field> This should give you a textbox asking if you want
to give your name, if checked a textfield should appear.
Note however, that this is just one way, you may
accomplish the same by using _javascript_!
Kind Regards,
Jan
|
- disabling widgets in CForms Jakob Schwendner
- Re: disabling widgets in CForms Jan Hoskens
- Re: disabling widgets in CForms Jan Hoskens