Swapping of template in AEM

Avatar

Avatar

Prashanth96

Avatar

Prashanth96

Prashanth96

19-01-2021

Hi, 

 

Scenario: we have 1000's of pages created based on a certain template, now we are trying to replace the template with a new one for some of the pages. I wanted to know is it possible to swap template for those existing pages?

 

If yes, could you please provide me with the solution how we can approach for the same.

 

@jbrar @Arun_Patidar @kautuk_sahni @BrianKasingli

View Entire Topic

Avatar

Avatar

BrianKasingli

MVP

Avatar

BrianKasingli

MVP

BrianKasingli
MVP

20-01-2021

@Prashanth96,

One way is by using the AEM groovy console to find all those pages, and update the sling:resourceType, cq:template, you can create a migration script. https://github.com/icfnext/aem-groovy-console

 

The migration script would look something like this:

 

 

// example of finding all nodes with the sling:resourceType == 'my-site/components/structure/page';
def doMigration() {
    def queryManager = session.workspace.queryManager
    def statement = "/jcr:root/content/my-site//*[@sling:resourceType='my-site/components/structure/page']"
    def query = queryManager.createQuery(statement, "xpath");
    def result = query.execute();
    def foundNodesInRows = result.rows;
    // applying write method to each node.
    foundNodesInRows.each { row ->
        def pageNode = getNode(row.path)
        pageNode.set("sling:resourceType", "my-site/components/structure/page2")
        pageNode.set("cq:template", "/conf/my-site/settings/wcm/templates/page2")
        // some kind of move operation...
        println "Updated sling:resourceType * cq:template on ${row.path}"
    }
}
 
doMigration()
session.save()

 

 

While creating the migration script, you should pull down content that is similar to production into your development environment, so you can test your script as you are building the script.

 

To take extra precautions, you should pull down the content into a lower environment, run the migration script, and then using a package manager to upload the code back to the production author... then replicate.