[xsl] Check checkboxen m.b.v. xsl

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een formulier voor het wijzigen van een product. Dit product bestaat uit een titel en een stijl (en nog veel meer wat niet belangrijk is). In de fields tags in de xml staan alle ingevulde waardes van dit product. Deze wil ik uitlezen en in mijn formulier plaatsen.

Het formulier bestaat uit een aantal style checkboxes (zie voor waardes de styles tags). Voor elke stijl is er dus 1 checkbox. Alle checkboxen met de waardes van de fields tag moeten worden gechecked. Ik weet enkel niet hoe ik dat kan doen.

Ik wil dus eigenlijk voor style met id 1, 2 en 3 (uit fields) de volgende extra code toevoegen aan mijn xsl bestand: checked="checked".

Hoe kan ik dat doen?

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<page>
<fields>
    <field name="title">
        <value>Test</value>
    </field>
    <field name="style">
        <value>
            <item>1</item>
            <item>2</item>
            <item>3</item>
        </value>
    </field>
</fields>
<styles>
    <style id="1">Classical</style>
    <style id="2">Modern</style>
    <style id="3">Retro</style>
    <style id="4">Romantisch</style>
</styles>
</page>


code:
1
2
3
<xsl:template match="page/styles/style">
    <input type="checkbox" name="styles[]" value="{@id}" id="style{@id}" /><label for="style{@id}"><xsl:value-of select="text()" /></label><br />
</xsl:template>

[ Voor 0% gewijzigd door Verwijderd op 12-08-2009 22:04 . Reden: foutje ]


  • matthijsln
  • Registratie: Augustus 2002
  • Nu online
Iets in deze geest, niet getest

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xsl:template match="page/styles/style">
    <label>
        <xsl:element name="input">
            <xsl:attribute name="type">checkbox</xsl:attribute>
            <xsl:attribute name="name">styles[]</xsl:attribute>
            <xsl:attribute name="value" select="@id"/>
            <xsl:if test="/page/fields/field[@name='style']//item = @id">
                <xsl:attribute name="checked">checked</xsl:attribute>
            <xsl:if>
        </xsl:element>
        <xsl:value-of select="text()"/>
    </label>
    <br/>
</xsl:template>

[ Voor 4% gewijzigd door matthijsln op 13-08-2009 00:11 . Reden: geen code=xsl syntax highlighting... ]


  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

matthijsln schreef op donderdag 13 augustus 2009 @ 00:03:
Iets in deze geest, niet getest

XML:
1
[..]
Is hem bijna (hij is niet well-formed en valideert vervolgens niet), dit is hem werkend:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<xsl:template match="page/styles/style">
    
        <xsl:element name="input">
            <xsl:attribute name="type">checkbox</xsl:attribute>
            <xsl:attribute name="id">style<xsl:value-of select="@id"/></xsl:attribute>
            <xsl:attribute name="name">styles[]</xsl:attribute>
            <xsl:attribute name="value"> <xsl:value-of select="@id"/></xsl:attribute>

            <xsl:if test="/page/fields/field[@name='style']//item = @id">
                <xsl:attribute name="checked">checked</xsl:attribute>
            </xsl:if>
        </xsl:element>
<label for="style{@id}">
        <xsl:value-of select="text()"/>
    </label>
    <br/>
</xsl:template>

[ Voor 6% gewijzigd door CoolGamer op 13-08-2009 00:21 ]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • matthijsln
  • Registratie: Augustus 2002
  • Nu online
Bedankt voor de fix :) Maar een <label> met als child een <input> werkt ook; zonder @id's.

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

matthijsln schreef op donderdag 13 augustus 2009 @ 00:27:
Bedankt voor de fix :) Maar een <label> met als child een <input> werkt ook; zonder @id's.
Dat wist ik niet, weer wat geleerd. Naja, dan kan er dit van maken:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<xsl:template match="page/styles/style">
    <label>  
        <xsl:element name="input">
            <xsl:attribute name="type">checkbox</xsl:attribute>
            <xsl:attribute name="name">styles[]</xsl:attribute>
            <xsl:attribute name="value"> <xsl:value-of select="@id"/></xsl:attribute>
            <xsl:if test="/page/fields/field[@name='style']//item = @id">
                <xsl:attribute name="checked">checked</xsl:attribute>
            </xsl:if>
        </xsl:element>

        <xsl:value-of select="text()"/>
    </label>
    <br/>
</xsl:template>

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Verwijderd

Topicstarter
Het werkt!

Ik wist niet eens dat je op deze manier elementen /attributen kon aanmaken!

Ik neem aan dat // item ervoor zorgt dat hij @id met elk item vergelijkt?

Thanx!

  • matthijsln
  • Registratie: Augustus 2002
  • Nu online
Verwijderd schreef op donderdag 13 augustus 2009 @ 09:18:
Ik neem aan dat // item ervoor zorgt dat hij @id met elk item vergelijkt?
//item zorgt ervoor dat de XPath expressie zoekt naar alle item child nodes, ongeacht de diepte van de tree :) Is alleen maar omdat ik te lui was om /value/item te typen. Is wel iets trager bij grotere xml trees.

Verwijderd

Topicstarter
Hmm, ik dacht dat ik /value/item al geprobeerd had en dat dat niet werkte... Probeer ik het nog eens werkt het idd wel :-S

Thanx!
Pagina: 1