Copied to clipboard

Flag this post as spam?

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


  • AlexR 39 posts 61 karma points
    May 05, 2010 @ 09:20
    AlexR
    0

    What is the best way to return XML from template

    I created template that return teaserImage XML and is protected from empty numbers:

    <xsl:template name="teaserImage">
    <xsl:param name="currentPage" />

    <xsl:if test="number($currentPage/data[@alias='teaserImage'])">
    <xsl:copy-of select="umbraco.library:GetMedia($currentPage/data[@alias='teaserImage'], 'false')" />
    </xsl:if>
    </xsl:template>

    <xsl:variable name="teaserImage">
    <xsl:call-template name="teaserImage">
    <xsl:with-param name="currentPage" select="$currentPage" />
    </xsl:call-template>
    </xsl:variable>

     

    Here I used copy-of function. And I think that using it is not the best way.

    Can I return full XML without copy it?

    For example, I can set variable without copy XML, but it is not protected:

    <xsl:variable name="teaserImage" select="umbraco.library:GetMedia($currentPage/data[@alias='teaserImage'], 'false')" />

     

     What is the best way to return XML from my template?

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    May 05, 2010 @ 09:37
    Chriztian Steinmeier
    0

    Hi AlexR,

    I just posted an answer to your other post about this.

    /Chriztian 

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    May 05, 2010 @ 09:42
    Chriztian Steinmeier
    1

    Hi again,

    Sorry, totally misunderstood your question I think.

    If you need the media item XML, you need to use the copy-of instruction - that's how you do it.

    /Chriztian

  • AlexR 39 posts 61 karma points
    May 05, 2010 @ 09:45
    AlexR
    0

    Thank you for answer. I asked because I just started to use XSLT.

    If using copy-of is the only way to return XML I will use it.

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    May 05, 2010 @ 10:00
    Chriztian Steinmeier
    0

    Just to clarify:

    The XML for the media item is only available through the library extension, so that's why you need to use the copy-of instruction to actually get it back from a template call.

    If you were to return the finished <img> (XML) tag from the template, you could just build it as a literal result, e.g.:

    <xsl:template name="teaserImage">
      <xsl:param name="currentPage" />
    
      <xsl:if test="number($currentPage/data[@alias='teaserImage'])">
        <xsl:variable name="media" select="umbraco.library:GetMedia($currentPage/data[@alias='teaserImage'], false())" />
        <img src="{$media/data[@alias = 'umbracoFile']}" width="..." height="..." />
      </xsl:if>
    </xsl:template>

     

    Please note I've changed 'false' to false() - a common pitfall with XSLT :-)

    Also note that you could do more checking for missing values etc. if you want to bulletproof it - Lee Kelleher has a blogpost on this, that you should check out.

    /Chriztian

  • AlexR 39 posts 61 karma points
    May 05, 2010 @ 11:05
    AlexR
    0

    Chriztian, thank you for your note about false().

    I returned XML for media because I want to work with image attributes in main template and so on.

    I am creating one XSLT file with useful templates. I will include it into every usual XSLT files and I will use templates from included XSLT file.

    I don't want write same functions in many templates.

     

    So I need to know how to return node-sets from templates.

  • 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