Copied to clipboard

Flag this post as spam?

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


  • Bezmundo 48 posts 139 karma points
    May 09, 2014 @ 12:04
    Bezmundo
    0

    Getting Last Item in related links (Umbraco 7)

    Been trying to find the last related link within a foreach loop. But there doesn't seem to be any Last() or IsLast() methods available. Does anyone know a way around this without having to use a count loop. Code and error below:

    @{
    if (root.HasValue("relatedLinks") && root.relatedLinks.ToString().Length > 2)
    {
    
        <ul>
            @foreach (var item in root.relatedLinks)
            {
                var test = root.relatedLinks;
    
    
                var linkUrl = (bool)item.isInternal ? Umbraco.NiceUrl(item.Value<int>("internal")) : item.link;
                var linkTarget = (bool)item.newWindow ? "_blank" : null;
    
                <li><a href="@linkUrl" target="@linkTarget">@item.caption</a></li>
    
                if (item.IsLast()) { <li>Do this</li>}
    
            }
        </ul>
    }
    

    'Newtonsoft.Json.Linq.JObject' does not contain a definition for 'IsLast'.

    Thanks in advance for your help.

  • Bezmundo 48 posts 139 karma points
    May 09, 2014 @ 12:24
    Bezmundo
    1

    Just done a bit more research and developed the following solution but I still think there could be better solution without having to go through two loops.

    @{
    if (root.HasValue("relatedLinks") && root.relatedLinks.ToString().Length > 2)
    {
        dynamic jObj = Newtonsoft.Json.JsonConvert.DeserializeObject(root.relatedLinksToString());
        int count = jObj.Count;
        int loopcount = 0;
        <ul>
            @foreach (var item in root.relatedLinks)
            {   
                var linkUrl = (bool)item.isInternal ? Umbraco.NiceUrl(item.Value<int>("internal")) : item.link;
                var linkTarget = (bool)item.newWindow ? "_blank" : null;
    
                <li><a href="@linkUrl" target="@linkTarget">@item.caption</a></li>
                loopcount++;
                if (loopcount == count) { } else {<li>|</li> } 
            }
        </ul>
    }
    

    }

  • Jeavon Leopold 3074 posts 13632 karma points MVP 11x admin c-trib
    May 11, 2014 @ 22:19
    Jeavon Leopold
    0

    Hi, I would do something like this:

    @{
        if (Model.Content.HasValue("relatedLinks") && Model.Content.GetPropertyValue<string>("relatedLinks").Length > 2)
        {
            <ul>
                @{
                    var relatedLinks = Model.Content.GetPropertyValue<JArray>("relatedLinks");
                    foreach (var item in relatedLinks)
                    {
                        var linkUrl = (item.Value<bool>("isInternal")) ? Umbraco.NiceUrl(item.Value<int>("internal")) : item.Value<string>("link");
                        var linkTarget = item.Value<bool>("newWindow") ? "_blank" : null;
                        <li><a href="@linkUrl" target="@linkTarget">@(item.Value<string>("caption"))</a></li>
                        if (!item.Equals(relatedLinks.Last))
                        {
                            <li>|</li>
                        }
                    }
                }
            </ul>
        }
    } 
    

    Jeavon

  • 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