Copied to clipboard

Flag this post as spam?

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


  • Tony 11 posts 31 karma points
    Jun 11, 2011 @ 06:48
    Tony
    0

    Return only news with start dates later than today

    Posted before, but I wasn't clear and the system isn't letting me edit... so posting a new one here and trying to be more clear :)

    Being new to XSLT and Umbraco... I am having difficulty trying to not show a news article after it is past today's date.

    Here is the code I am using to show my news list...

    <xsl:if test="$numberOfItems &gt; 0">
        <ul id="newsList">
          
          <xsl:for-each select="$articlePages">
            
            <xsl:sort select="articleDate" order="ascending"/>

            <xsl:if test="position() > $recordsPerPage * number($pageNumber) and   
            position() &lt;= number($recordsPerPage * number($pageNumber) +   
            $recordsPerPage )">
      
              <li>
                <h3>
                  <href="{umbraco.library:NiceUrl(@id)}">
                    <xsl:value-of select="@nodeName"/>
                  </a>
                </h3>
                <class="articleDate">
                  <xsl:value-of select="umbraco.library:FormatDateTime(articleDate,'dd MMMM yyyy')"/>
                </p>
                <p>
                  <xsl:value-of select="articleSummary"/>
                </p>
              </li>
            </xsl:if>
            
          </xsl:for-each>
        </ul>

        <xsl:if test="$numberOfItems > $recordsPerPage">
          <id="pager">
            <xsl:call-template name="pageNumbers">
              <xsl:with-param name="pageIndex" select="1"/>
            </xsl:call-template>
          </p>
        </xsl:if>
      
      </xsl:if>

    This code shows the news and pages it.  For the piece I am trying to add now, I have tried if statements which didn't work and for-each statements which all blew up in my face.

    Any help would be appreciated.

    Thank you,

    Tony

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jun 11, 2011 @ 10:05
    Chriztian Steinmeier
    1

    Hi Tony,

    There's a couple of handy extension methods in umbraco.library for that, e.g.:

    <xsl:for-each select="$articlePages[umbraco.library:DateGreaterThanToday(articleDate)]">

    or:

    <xsl:for-each select="$articlePages[umbraco.library:DateGreaterThanOrEqualToday(articleDate)]">

    /Chriztian

  • Tony 11 posts 31 karma points
    Jun 11, 2011 @ 21:19
    Tony
    0

    Thanks for the response Chriztian...

    I tried that before thinking it sounded like what I needed... I keep getting

    System.FormatException: String was not recognized as a valid DateTime

    Any idea why that would be happenening?  I have tried formatting the date and that doesn't seem to work, though I am not sure what exact format it is looking for.  Any ideas?

  • Tony 11 posts 31 karma points
    Jun 11, 2011 @ 21:33
    Tony
    0

    So here is what I find wierd...

    If I do this:
    <xsl:for-each select="$articlePages[umbraco.library:DateGreaterThanOrEqualToday('06/17/2011')]">
    it works... yay

    but if I do this:
    <xsl:for-each select="$articlePages[umbraco.library:DateGreaterThanOrEqualToday(umbraco.library:FormatDateTime(newsDate, 'MM/dd/yyyy'))]">
    it doesn't work... invalid date again

    or this:
    <xsl:variable name="dateNews" select="umbraco.library:FormatDateTime(newsDate, 'MM/dd/yyyy')"/>
    <xsl:for-each select="$articlePages[umbraco.library:DateGreaterThanOrEqualToday($dateNews)]">
    it doesn't work... invalid date again

    I can't hardcode the date because it needs to change per news item, so what am I missing here to make this work?

    Thanks!

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jun 11, 2011 @ 22:07
    Chriztian Steinmeier
    1

    Hi Tony,

    If articleDate is a standard Date (or DateTime) property it should work. The only date format really worth storing is the xmlDate format (e.g., '2011-06-11T21:53:16+0200') - this will work with all the formatting functions AND it's sortable as just a string.

    What you need to be careful of though, is that when you do something like this:

    <xsl:for-each select="$articlePages[umbraco.library:DateGreaterThanOrEqualToday(newsDate)]">

    - the processor will call the function on ALL the matching $articlePages, whether they have a newsDate property or not; so maybe that's your problem - one of the pages doesn't have a newsDate property (or has a bad 'date' in it). This could easily happen if you add the newsDate property to a Document Type, after having already published pages based on the version without it.

    You can try to safeguard against the missing property issue by doing this:

    <xsl:for-each select="$articlePages[normalize-space(newsDate)][umbraco.library:DateGreaterThanOrEqualToday(newsDate)]"> 

    This will ensure that the there is a newsDate property and it has a value other than pure whitespace.

    /Chriztian

     

  • Tony 11 posts 31 karma points
    Jun 11, 2011 @ 22:28
    Tony
    0

    Seriously Chriztian... you are my hero.  That was the issue, so I used your "safeguard" code and it worked like a charm.

    Thank you very much... my headache is subsiding :)

    Tony

  • Chriztian Steinmeier 2726 posts 8320 karma points MVP 4x admin c-trib
    Jun 11, 2011 @ 23:52
    Chriztian Steinmeier
    0

    Great - you're welcome,

    One less problem in the world... :-)

    /Chriztian

  • 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