scalaplayframeworktypesafe-config

Typesafe config: How to iterate over configuration items


In my Play application I've a configuration like this:

social {
    twitter {
        url="https://twitter.com"
        logo="images/twitter.png"
    }
    facebook {
        url="https://www.facebook.com"
        logo="images/facebook.png"
    }
}

Ho do I iterate over all the social entries to get url and logo for each entry?

<table border="0" cellspacing="0" cellpadding="2"><tr>
    @configuration.getConfig("social").map { config =>
        @for(item <- config.entrySet) {
           <td><a href="item.getString("url")">
           <img src="@routes.Assets.at("item.getString("logo")").absoluteURL()" width="24" height="24"/></a></td>
        }
    }
</table>

Of course, item.getString in the snippet here above does not work... it just shows what I'm trying to achieve.

The final objective would be to be able to add any further social url without having to modify the page template.


Solution

  • If you change the config to:

    "social" : [
         {
            name="twitter",
            url="https://twitter.com",
            logo="images/twitter.png"
        },
        {
            name="facebook",
            url="https://www.facebook.com",
            logo="images/facebook.png"
        }
    ]
    

    You could do it like this:

    @(message: String)(implicit request: RequestHeader)
    @import play.api.Play.current
    
    <table border="0" cellspacing="0" cellpadding="2"><tr>
        @current.configuration.getConfigList("social").get.map { config =>
                <td><a href="@config.getString("url")">
                <img src="@routes.Assets.at(config.getString("logo").get).absoluteURL()" width="24" height="24"/></a></td>
            }
    </table>