Expand my Community achievements bar.

How to propagate template code changes to sites using that template

Avatar

Level 4

Is there an easy way to propagate the changes to a template in code to the pages that use that template? Without making brand new pages.

 

I have added components and moved them around.

4 Replies

Avatar

Community Advisor

You can use a Groovy script to update existing pages that use the modified template.

Avatar

Level 5

Curl Command, Groovy script & Managed Controlled Process.

Avatar

Level 5

Hi @rkody 

No easy way. But rewarding way, yes.

 

You can also develop you own TouchUI tool, an integrate it into your project. For the beginning I imagine a simple page with a field for a path to update and a field for a template to lookup for. Of course you can refine it and make smarter by the time, but for now you might start with that.

 

Few considerations:

  • If you have an AMS team they will thank you (if you want to roll-out the template changes progressively by env or brand or whatever)
  • Plus, you could reuse it in other future projects (with few specific adjustments for each project probably)
  • Is an alternative if your team does not have Groovy skills.

Avatar

Level 2

This approach using groovy might work

def resolver = getResourceResolver()
try {
    String templatePath = "/content/my-site/templates/my-template"
  
     String componentPath = "/apps/my-site/components/my-component"

    Resource templateResource = resolver.getResource(templatePath)

    if (templateResource != null) {
        Node templateNode = templateResource.adaptTo(Node.class)

        Node componentNode = templateNode.addNode("myNewComponent", "cq:Component")
        componentNode.setProperty("sling:resourceType", componentPath)
        
        componentNode.setProperty("cq:template", templatePath)
        componentNode.setProperty("myCustomProperty", "value")

        // Save the changes
        templateNode.getSession().save()
        println "Component added successfully!"
    } else {
        println "Template not found!"
    }
} catch (RepositoryException e) {
    println "An error occurred: ${e.message}"
} finally {
    if (resolver != null) {
        resolver.close()
    }
}