Copied to clipboard

Flag this post as spam?

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


  • Matias Korn 30 posts 49 karma points
    Apr 17, 2012 @ 10:50
    Matias Korn
    0

    List News with category

    Hello everybody. I want to list all the news order by date. The thing is that i have a Content  structure that goes like this

    News

          -> [News Category]

                 -> [News Item]

     

    How can i list all the News items order by date and inside each news item show the image of the news category.

    I just want to know how to handle this - thanks

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 17, 2012 @ 11:00
    Chriztian Steinmeier
    0

    Hi Matias,

    Inside a News Item (or in a for-each where the current item is a NewsItem) you can access the parent category with this:

    <xsl:variable name="myCategory" select="parent::NewsCategory" />

    - and then access the properties of the category as you usually do, e.g.:

    <xsl:value-of select="$myCategory/image" />

    (This assumes the Alias of the News Category document type is NewsCategory - change the code accordingly if it's called something else.)

    /Chriztian

  • Matias Korn 30 posts 49 karma points
    Apr 17, 2012 @ 11:02
    Matias Korn
    0

    And how do i list all the news? because usually it is $currentPage/* but would my xPath be something like /*/* then or what ? how do i list the news of all the categories and sorting them by date?

    And thanks for that! didn't knew that.

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 17, 2012 @ 11:10
    Chriztian Steinmeier
    0

    Hi Matias,

    Here's a good starting point:

    <?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]" />
    
        <!-- Adjust the XPath here for selecting the newsRoot based on the site root -->
        <xsl:variable name="newsRoot" select="$siteRoot/News" />
    
        <xsl:template match="/">
            <!-- Process all news items, regardless of depth -->
            <xsl:for-each select="$newsRoot//NewsItem">
                <xsl:sort select="@createDate" data-type="text" order="descending" />
    
                <!-- Handle the News Item -->
                <xsl:apply-templates select="." />
    
            </xsl:for-each>
        </xsl:template>
    
        <!-- Template for a News Item -->
        <xsl:template match="NewsItem">
            <xsl:variable name="myCategory" select="parent::NewsCategory" />
            <p>
                "<xsl:value-of select="@nodeName" />", category: <xsl:value-of select="$myCategory/@nodeName" />
            </p>
        </xsl:template>
    
    </xsl:stylesheet>

    /Chriztian

  • Matias Korn 30 posts 49 karma points
    Apr 17, 2012 @ 11:47
    Matias Korn
    0


    <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="html" indent="yes" omit-xml-declaration="yes" />

            <xsl:param name="currentPage" />
            <xsl:variable name="siteRoot" select="$currentPage/ancestor-or-self::*[@level = 1]" />
            
            
            <xsl:variable name="newsRoot" select="$siteRoot/Home/News" />
            
            <xsl:template match="/">
                    
                    <xsl:for-each select="$newsRoot//NewsItem">
                            <xsl:sort select="@createDate" data-type="text" order="descending" />
                      
                            
                            <xsl:apply-templates select="." />
                    xsl:for-each>
            xsl:template>
            
            
            <xsl:template match="NewsItem">
              <xsl:variable name="myCategory" select="parent::NewsCategory" />
              <div class="home-news">
                <div class="home-news-catimg">
                  <img>
                    <xsl:attribute name="src">
                      <xsl:value-of select="$myCategory/newsCategoryImg" />
                    xsl:attribute>
                  img>
                div>
                <a>
                  <xsl:attribute name="href">
                    <xsl:value-of select="@urlName"/>
                  xsl:attribute>
                  <h2 class="home-news-title"><xsl:value-of select="@nodeName" />h2>
                a>
                <div class="home-news-content">
                  <xsl:value-of select="newsCategoryItemContent" disable-output-escaping="yes"/>
                  <a class="home-news-readmore">
                    Read more
                    <xsl:attribute name="href">
                      <xsl:value-of select="@urlName"/>
                    xsl:attribute>
                  a>
                div>
                <div class="home-news-line">div>
              div>
            xsl:template>

    xsl:stylesheet>


    It doesn't show anything. I think it cant find the news items.

    I have checked all the names is correct and the content tree is like this:

    Content -> Home -> [News Root] -> [News Category] -> [News Item]

    And again thanks for the help,  i dont know what i am doing wrong...

    I have also tried with $siteRoot/News

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 17, 2012 @ 11:55
    Chriztian Steinmeier
    0

    Hi Matias,

    It's most likely an issue with the aliases - XPath needs the "nodeTypeAlias", not the "nodeName" - so be sure to double check that the Home and News nodes have those aliases.

    /Chriztian

     

  • Matias Korn 30 posts 49 karma points
    Apr 17, 2012 @ 12:03
    Matias Korn
    0

    yes and we both aggree that it should be that Alias of the document type right?

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 17, 2012 @ 12:26
    Chriztian Steinmeier
    0

    Yes - the same goes for NewsItem and NewsCategory of course...

    BTW: Which version of Umbraco are you using? 

    /Chriztian

  • Matias Korn 30 posts 49 karma points
    Apr 17, 2012 @ 12:31
    Matias Korn
    0

    I am using umbraco 4.7

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 17, 2012 @ 12:38
    Chriztian Steinmeier
    0

    OK - hardcore methods to the rescue - use this root template and let's see if the results makes sense:

    <xsl:template match="/">
        <textarea rows="8" cols="40">
            <xsl:copy-of select="$currentPage/ancestor-or-self::*[@level = 1]" />
        </textarea>
    </xsl:template>

     

    If you can paste some of it (not it all - it will dump all the XML for the site), I'll have a look at what could be wrong.

    /Chriztian

  • Matias Korn 30 posts 49 karma points
    Apr 18, 2012 @ 00:35
    Matias Korn
    0

    i did what you wrote and tested my way on and now it is working and the problem in the end was a xsl:attribute that contained a xsl:value of that returned @urlName that somehow returned an error.

    I only have a problem now with href="{umbraco.library:NiceUrl(@id)}" that it gives an error that doesn't make any sense.

    i fixed the problem with the @urlName by wrapping the text inside that a with xsl:text

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 18, 2012 @ 00:43
    Chriztian Steinmeier
    0

    Hi Matias,

    Good to hear you've got it working.

    If you're still using my code from the beginning, you're probably seeing an error along the lines of "prefix not defined" or similar. I like to shorten the umbraco.library: prefix to just umb, so you should use this:

    <a href="{umb:NiceUrl(@id)}" />

    instead...

    /Chriztian

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 18, 2012 @ 00:47
    Chriztian Steinmeier
    0

    Also - as long as you're just outputting simple values to attributes, you can just use the curly braces instead - makes it much easier to read (and you don't have to make sure you're not outputing any text before trying to do the attribute), so:

    <a>
        <xsl:attribute name="href">
            <xsl:value-of select="@urlName" />
        </xsl:attribute>
        Link
    </a>

    Is much easier written:

    <a href="{@urlName}">Link</a>

     

    /Chriztian

  • Matias Korn 30 posts 49 karma points
    Apr 19, 2012 @ 10:21
    Matias Korn
    0

    Thanks for the advice man! :) i am realy happy for the help! :)

  • Matias Korn 30 posts 49 karma points
    Apr 26, 2012 @ 12:41
    Matias Korn
    0

    I have a problem with my list and that is that it wont get the new "news" results. It feels like it wont remove the cache, but i have tried to change something in web.config and then back, but it wont update with the new changes. The old news that is delete, is keep staying there.

  • Chriztian Steinmeier 2800 posts 8791 karma points MVP 8x admin c-trib
    Apr 26, 2012 @ 12:46
    Chriztian Steinmeier
    0

    Definitely sounds like a cache problem - does the old (deleted) News appear in the App_Data/Umbraco.config XML file? Does the newly created News appear in that file?

    Which settings have you got on the News macro for the "Cache Period ____ Seconds" setting?

    /Chriztian 

  • Matias Korn 30 posts 49 karma points
    Apr 26, 2012 @ 12:52
    Matias Korn
    0

    Yes the old news is delete in umbraco.config and the new news is there and cache periode is 0 seconds

  • Matias Korn 30 posts 49 karma points
    Apr 30, 2012 @ 08:38
    Matias Korn
    0

    is there anybody that have any idea about the cache problem??

  • 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