Copied to clipboard

Flag this post as spam?

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


  • Koen van Ras 55 posts 315 karma points c-trib
    Apr 22, 2020 @ 15:34
    Koen van Ras
    0

    Get IMedia children in Umbraco 8

    Hi,

    I'm trying to get all the child folders of a media folder in Umbraco 8. I'm using the MediaService to get a root media item (folder) like this:

    var challengesRootFolder = ms.GetRootMedia().FirstOrDefault(x => x.Name.InvariantEquals("Challenges"));
    

    Now I can use the MediaService to check if the IMedia item has children using the .HasChildren() method.

    Is there any way to get all the child folders as IEnumerable<IMedia> from the challengesRootFolder in the code snippet?

  • Kevin Jump 1867 posts 11859 karma points MVP 4x c-trib
    Apr 22, 2020 @ 15:51
    Kevin Jump
    100

    Hi,

    you can get the child items through

            ms.GetPagedChildren(item.Id, 0, 100, out long total);
    

    this would get the first 100 items (nothing but performance stopping you upping the pageSize variable)

    a more comprehensive way to get everything

    const int pageSize = 500;
    var page = 0;
    var total = long.MaxValue;
    while(page * pageSize < total)
    {
      var children = ms.GetPagedChildren(item.Id, page++, pageSize, out total);
    
      // do stuff wit the child items
    }
    

    Also GetPagedDescendants will get all items down the tree.

    Update: Just getting folders is a little more complex, but you can see how Umbraco does it in the source for the media controller https://github.com/umbraco/Umbraco-CMS/blob/v8/contrib/src/Umbraco.Web/Editors/MediaController.cs#L196

  • Koen van Ras 55 posts 315 karma points c-trib
    Apr 22, 2020 @ 16:20
    Koen van Ras
    0

    Thanks this worked! I managed to get only folders by simply adding a Where to check the ContentType.Alias in the while loop. Like this:

    children.AddRange(ms.GetPagedChildren(challengesRootFolder.Id, page++, pageSize, out total)
                        .Where(x => x.ContentType.Alias == Constants.Conventions.MediaTypes.Folder));
    
  • 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