Copied to clipboard

Flag this post as spam?

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


  • Lex Godthelp 24 posts 106 karma points
    Jun 22, 2015 @ 11:39
    Lex Godthelp
    0

    Getting a VortoValue from a specific node

    Hello guys,

    I just started off with Razor and i am running into all kinds of trouble and i was hoping you could help me along my way. I always work with XSLT but for this project we decided to use Razor because of Vorto (specifically made for Multilingual sites).

    I'm trying to do something really simple but i can't find any documentation on how to do it. I want to make a list with childpages from a specific page. How would i go around doing this by using id instead of the current selection i'm using. I also want to use the same selection to add the value of a field inside that specific node as h2.

    @using  Our.Umbraco.Vorto.Extensions
    @inherits Umbraco.Web.Macros.PartialViewMacroPage
    @{var selection = CurrentPage.Site().FirstChild("Modules").Children("Module");}
    <h2></h2>
    <ul>
    @foreach(var item in selection){
    IPublishedContent sitem= (IPublishedContent)item;
        <li><a href="@item.Url">@sitem.GetVortoValue("paginatitel")</a></li>
    } 
    </ul>
    
  • René Pjengaard 118 posts 702 karma points c-trib
    Jun 22, 2015 @ 12:57
    René Pjengaard
    0

    Hi Lex,

    you can get children from a specific page by using

    IPublishContent[] children = UmbracoContext.Current.ContentCache.GetById(1234).Children("Module");
    

    You can get properties from child-node this way:

    <h2>@(Model.GetPropertyValue("propertyAlias"))</h2>
    

    Question! Why are you using the sitem var instead af using the item? You could go:

    @foreach(IPublishContent item in selection) { 
        <li><a href="@item.Url">@item.GetVortoValue("paginatitel")</a></li>
    }
    

    I haven´t tested the code, but it schould work.

    Regards René

  • Lex Godthelp 24 posts 106 karma points
    Jun 22, 2015 @ 13:12
    Lex Godthelp
    0

    Hi René,

    Thank you for your reply. Could you show me how to put this all together, because the problem i keep having when constructing Razor is that i somehow do something wrong which makes my macro fail.

    I am using the @sitem because of

    this

  • René Pjengaard 118 posts 702 karma points c-trib
    Jun 22, 2015 @ 13:53
    René Pjengaard
    100

    Hi Lex,

    i hardly use MacroPartials anymore. But i can try giving it a go. I presume you are using a macroparameter to set the id of the parent node.

    @inherits Umbraco.Web.Macros.PartialViewMacroPage
    @{
        var id = 0;
    
        // get id from ex. contentPicker datatype on macro
        int.TryParse(Model.MacroParameters["parentNode"].ToString(), out id);
    
        // get IPublishContent object from id
        IPublishedContent parent = UmbracoContext.Current.ContentCache.GetById(id);
    
        // get children by documenttype "Module"
        IPublishedContent[] children = parent.Children.Where(x => x.DocumentTypeAlias == "Module").ToArray();
    }
    <h2>@(parent.GetPropertyValue<string>("headline"))</h2>
    
    @if (children.Any()){
        <ul>
            @foreach (IPublishedContent item in children)
            {
                <li><a href="@item.Url">@(item.GetPropertyValue<string>("pagetitle"))</a></li>
            }        
        </ul>
    }
    

    /René

  • Lex Godthelp 24 posts 106 karma points
    Jun 22, 2015 @ 14:03
    Lex Godthelp
    0

    Hello René, i wasn't setting the id with a MacroParameter but as a hard value. So with a little bit of Googling i changed:

    int.TryParse(Model.MacroParameters["parentNode"].ToString(), out id);
    

    To:

    int.TryParse(1128.ToString(), out id);
    

    Which works perfect. Thank you so much for your help René!

  • René Pjengaard 118 posts 702 karma points c-trib
    Jun 22, 2015 @ 14:14
    René Pjengaard
    0

    Hi Lex,

    great you got it working! :-)

    Extra bonus info: you don´t need to int.TryParse when you hardcode the id. So you can do just:

    @inherits Umbraco.Web.Macros.PartialViewMacroPage @{ // get IPublishContent object from id IPublishedContent parent = UmbracoContext.Current.ContentCache.GetById(1128);
    
    // get children by documenttype "Module"
    IPublishedContent[] children = parent.Children.Where(x => x.DocumentTypeAlias == "Module").ToArray();
    }
    

    /René

  • 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