Copied to clipboard

Flag this post as spam?

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


  • Nicolai Sørensen 42 posts 66 karma points
    Sep 26, 2012 @ 12:26
    Nicolai Sørensen
    0

    Use of Generic properties in macro

    Have tried so many of the solutions I found by searching the forum, but no luck yet.

    I have created a document-type that has a generic property called start-date and I want to make a macro for the document using that document-type that accesses start-date and more when it is finished.

    My problem is that I can't find the right way to get that generic property value into my macro. Most tries have been with currentPage.

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Sep 26, 2012 @ 12:37
    Chriztian Steinmeier
    0

    Hi Nicolai,

    Try this simple macro - it will only do something if the currentpage is your specific Document Type and it has a value in the property - and then only if the date in that property is before "today"...

    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet
        version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:umb="urn:umbraco.library"
        exclude-result-prefixes="umb"
    >
    
        <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
    
        <xsl:param name="currentPage" />
        <xsl:variable name="siteRoot" select="$currentPage/ancestor-or-self::*[@level = 1]" />
    
        <xsl:template match="/">
            <xsl:apply-templates select="$currentPage[self::DOCUMENT_TYPE_ALIAS][normalize-space(PROPERTY_ALIAS)]" />
        </xsl:template>
    
        <xsl:template match="DOCUMENT_TYPE_ALIAS">
            <xsl:if test="not(umb:DateGreaterThanToday(PROPERTY_ALIAS))">
                <!-- Do something -->
            </xsl:if>
        </xsl:template>
    
    </xsl:stylesheet>

    /Chriztian

  • Nicolai Sørensen 42 posts 66 karma points
    Sep 26, 2012 @ 13:00
    Nicolai Sørensen
    1

    Will try that as soon as I get home again.

    Will need to buy you a beer soon Chriztian, you've saved me quite a few times up till now :D

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Sep 26, 2012 @ 13:02
    Chriztian Steinmeier
    0

    Haha :-)

    You're welcome,

    /Chriztian

  • Nicolai Sørensen 42 posts 66 karma points
    Sep 26, 2012 @ 16:17
    Nicolai Sørensen
    0

    Ok, back at my desk. I have tried the code and I must be doing something wrong.

            <xsl:param name="currentPage" />
            <xsl:variable name="siteRoot" select="$currentPage/ancestor-or-self::*[@level = 1]" />
    
            <xsl:template match="/">
                    <xsl:apply-templates select="$currentPage[self::cbx-date-ctrl-page][normalize-space('start-date')]" />
            </xsl:template>
    
            <xsl:template match="cbx-date-ctrl-page">
                    <xsl:if test="not(umb:DateGreaterThanToday('start-date'))">
                            <!-- Do something -->
                    </xsl:if>
            </xsl:template>

     

    I have tested that $currentPage/@nodeTypeAlias gives cbx-date-ctrl-page and i can see that the dates are there when I print a $currentPage[self::*]

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Sep 26, 2012 @ 21:12
    Chriztian Steinmeier
    0

    Hi Nicolai,

    First off, if @nodeTypeAlias gives you something, you're using the "legacy XML schema" and then we need to address that.

    Second, where you use start-date be sure not to wrap quotes around, 'cause then you're sending a string instead of the actual value.

    So if you're actually using the new (since 4.5) XML schema this is the way to go:

    <xsl:template match="/">
        <xsl:apply-templates select="$currentPage[self::cbx-date-ctrl-page][normalize-space(start-date)]" />
    </xsl:template>
    
    <xsl:template match="cbx-date-ctrl-page">
        <xsl:if test="not(umb:DateGreaterThanToday(start-date))">
            <!-- Do something -->
        </xsl:if>
    </xsl:template>

    - otherwise, if you're stuck on the old one - do this:

    <xsl:template match="/">
        <xsl:apply-templates select="$currentPage[@nodeTypeAlias = 'scbx-date-ctrl-page'][normalize-space(data[@alias = 'start-date'])]" />
    </xsl:template>
    
    <xsl:template match="node[@nodeTypeAlias = 'cbx-date-ctrl-page']">
        <xsl:if test="not(umb:DateGreaterThanToday(data[@alias = 'start-date']))">
            <!-- Do something -->
        </xsl:if>
    </xsl:template>

    - YES, I know it's confusing, but you should really take your time to understand how these two otherwise identical pieces of code relate, and you'll be *so* much better at reading all the code samples people paste here & there... 

    /Chriztian

  • Nicolai Sørensen 42 posts 66 karma points
    Sep 27, 2012 @ 08:40
    Nicolai Sørensen
    0

    Hi Chriztian,

    You are right on all counts. Being php, java etc for what feels as a lifetime, this will take som getting use to, and especially the part with understading basics from your example.

    I learned from this that alot changed with 4.5, and as I am on 4.01 with the system I am servicing, I need to watch out when I look for solutions. Also I see that things have been so simplyfied which I will miss out on until they update my system ;)

    Again I owe you a huge beer, time and place please :D

  • 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