Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • kentiler 76 posts 69 karma points
    Feb 24, 2010 @ 02:57
    kentiler
    0

    If/Then or Switch/Select functionality with XSLT?

    Hi,

    I have a custom datatype that is a drop down list where users will be able to specify certain look and feel attributes on the page properties.

    There are roughly 10 items in the drop down list.  I am trying to write the code to determine the selected value from this datatype (called titleColorPicker), but I'm having trouble since Xslt doesn't have an else feature.  I could go with 10 if statements, but is there a more efficient way to do this?

    Thank you!

    --Kent Iler

  • Lee Kelleher 4026 posts 15837 karma points MVP 13x admin c-trib
    Feb 24, 2010 @ 03:16
    Lee Kelleher
    2

    Hi Kent,

    You can use the <xsl:choose> element. For example:

    <xsl:choose>
        <xsl:when test="string(data[@alias='titleColorPicker']) != ''">
            <xsl:value-of select="data[@alias='titleColorPicker']" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:text>default value</xsl:text>
        </xsl:otherwise>
    </xsl:choose>

    It's similar logic to an if/else statement (in procedural programming), but you can have multiple <xsl:when> conditions in the same <xsl:choose>.

    Good luck, Lee.

  • kentiler 76 posts 69 karma points
    Feb 24, 2010 @ 16:21
    kentiler
    0

    Thanks, Lee!  I'll give that a shot!

  • kentiler 76 posts 69 karma points
    Feb 25, 2010 @ 08:33
    kentiler
    0

    I think I want to change the logic a bit and just put the value of the drop down list as the ID in the div statement.  I'm having a bit of trouble with this.  For example, the property is named titleColor (it's a custom DDL), but this doens't work.

    <div class="grid_12" id="{data[@alias = 'titleColor']}">

    Any ideas?

    Thanks!

    --Kent

  • Kim Andersen 1447 posts 2197 karma points MVP
    Feb 25, 2010 @ 08:50
    Kim Andersen
    0

    Hi Kent

    Try something like this:

    <div class="grid_12">
        <xsl:attribute name="id"><xsl:value-of select="$currentPage/data[@alias='titleColor']" /></xsl:attribute>
    
    </div>

    Hope this makes sense to you.

    /Kim A

  • jonok 297 posts 658 karma points
    Feb 25, 2010 @ 08:55
    jonok
    0

    Hi Kent, you should be able to add an id attribute like this:

    <div class="grid_12">
    <xsl:attribute name="id">
    <xsl:value-of select="data[@alias='titleColorPicker']" />
    </xsl:attribute>

     

  • Petr Snobelt 923 posts 1535 karma points
    Feb 25, 2010 @ 09:41
    Petr Snobelt
    0

    BTW: xsl:if is also available...

  • kentiler 76 posts 69 karma points
    Feb 26, 2010 @ 06:31
    kentiler
    0

    I appreciate all the help, but still having trouble.  I've tried:

    <div class="grid_12">
       
    <xsl:attribute name="id"><xsl:value-of select="$currentPage/data[@alias='titleColorPick']" /></xsl:attribute>
    </div>

    and

    <div class="grid_12">
    <xsl:attribute name="id">
           
    <xsl:value-of select="data[@alias='titleColorPick']" />
    </xsl:attribute>

     

    But both approaches still end up with an empty value in the ID tag:

     

    <div class="grid_12" id="" />
    

    I have verified the name of the property is now titleColorPick (changed it to something different from the XSLT file name, and also verified that the current page has a value set.

    Any ideas?

    Thanks!

    --Kent

  • Petr Snobelt 923 posts 1535 karma points
    Feb 26, 2010 @ 08:25
  • kentiler 76 posts 69 karma points
    Feb 26, 2010 @ 20:47
    kentiler
    0

    I checked that link, Petr, but it doesn't seem to apply.  Here's the code that I have for the titleColorPick:

    <xsl:template match="/">
    <!-- start writing XSLT -->
    <div class="grid_12"><xsl:attribute name="id"><xsl:value-of select="data[@alias='titleColorPick']" /></xsl:attribute></div>
    </xsl:template>
  • Lee Kelleher 4026 posts 15837 karma points MVP 13x admin c-trib
    Feb 26, 2010 @ 20:55
    Lee Kelleher
    0

    Hi Kent,

    I'm pretty sure Petr is on the right line of thinking here.  Try this modified XSLT:

    <xsl:template match="/">
        <div class="grid_12">
            <xsl:attribute name="id">
                <xsl:value-of select="data[@alias='titleColorPick']" />
            </xsl:attribute>
            <xsl:comment><![CDATA[.]]></xsl:comment>
        </div>
    </xsl:template>

    The problem with empty tags self-closing is that they have no text/content ... hence they self-close.  So if you add a HTML comment in there - then it wont self-close ... and you wont see any visible difference on the rendered webpage in your browser.

    If that doesn't work, then it might be worthwhile posting your entire XSLT? - so that we can get a better understanding of how to solve your problem.

    Cheers, Lee.

  • kentiler 76 posts 69 karma points
    Feb 26, 2010 @ 21:47
    kentiler
    0

    Here's the result from your code, Lee:

     

    <!-- Start Title -->
    <div class="grid_12" id=""><!--.--></div>
    <!-- End Title -->
    

    Here's the items from the custom drop down list - could it be something from the datatype configuration?

    Datebase datatype


    Text Value
    Black 8 Delete
    Blue 9 Delete
    Brown 10 Delete
    Green 11 Delete
    Orange 12 Delete
    Pink 13 Delete
    Purple 14 Delete
    Red 15 Delete
    Turquoise 16 Delete

    Add prevalue
  • kentiler 76 posts 69 karma points
    Feb 26, 2010 @ 21:48
    kentiler
    0

    Here's the full XSLT:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
    <xsl:stylesheet
     version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:msxml="urn:schemas-microsoft-com:xslt"
     xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
     exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">

    <xsl:output method="xml" omit-xml-declaration="yes"/>
    <xsl:param name="currentPage"/>
    <xsl:template match="/">
    <div class="grid_12">
    <xsl:attribute name="id">
    <xsl:value-of select="data[@alias='titleColorPick']" />
    </xsl:attribute>
    <xsl:comment><![CDATA[.]]></xsl:comment>
    </div></xsl:template>
    </xsl:stylesheet>
  • Kim Andersen 1447 posts 2197 karma points MVP
    Feb 26, 2010 @ 21:55
    Kim Andersen
    1

    I think that you should have a $currentPage/ in front of your data[@alias......But you said that you had tried this or?

    Otherwise, try to print the value out in a textarea, to make sure that there is a value in the field. Try this:

    <textarea>
    <xsl:value-of select="$currentPage/data[@alias='titleColorPick']" />
    </textarea>

    Just to make sure. And by the way Kent, which version of Umbraco are you using?

    /Kim A

  • kentiler 76 posts 69 karma points
    Feb 26, 2010 @ 22:44
    kentiler
    0

    That did it!  Thanks to all who helped!

    --Kent

  • Kim Andersen 1447 posts 2197 karma points MVP
    Mar 02, 2010 @ 09:50
    Kim Andersen
    0

    Perfect Kent. Remember to mark one of all the answers in this thread as the solution, so that people know that this issue har been solved :)

    /Kim A

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies