Search code examples
content-management-systemxpathquery

In CrafterCMS, how can I query a model to get an array with all the fields in a repeated group?


In CrafterCMS, I have a component Team with a itemSelector field where I'm assigning some instances of another component TeamMember.

In the template of Team I'm using siteItemService.getSiteItem to get the model information of child components:

<#assign memberModel =  siteItemService.getSiteItem(memberItem.storeUrl) />

Between the fields of type TeamMember I have: Some fields of TeamMember

I'm able to get the value of skillTitle like this:

<#assign skillsTitle = memberModel.queryValue("//skillsTitle")!"" />

But I'm not able to get the value of the values in the repeating group.

I tried with:

<#assign skills = memberModel.queryValues("//skills")![] />

It returns an array of just one element, I think is an empty string

<#assign skills = memberModel.queryValues("//skills/item")![] />

It returns an array with the right number of elements, but I think all of them are empty strings

If I use:

<#assign skills = memberModel.queryValues("//skills/item/skillName")![] />

I get a correct array with all the skill names, but I need iterate over both values (skillName and skillLevel)

How can I query the model in order to get an array which elements have all the values in the repeated group?


Solution

  • Once you get the SiteItem with

    <#assign memberModel = siteItemService.getSiteItem(memberItem.storeUrl) />

    it works just like any other contentModel variable within a FreeMarker template. So, you can iterate it with

    <#list memberModel.skills.item as skill>
        ${skill.skillName} = ${skill.skillLevel}
    </#list>