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.

5 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()
    }
}

Avatar

Community Advisor

@rkody Are you using an editable or static template here?

If you modify the structure or policies of an editable template, the changes are automatically propagated to all pages that inherit from that template.

You could also write a script to update the affected pages programmatically like Groovy.

If the static template references a server-side script, any changes you make in the script will automatically be reflected on all pages that use the template.