Sitecore PowerShell Rendering Helper Functions
For a past project, I had to write a lot of PowerShell for Sitecore migration scripts. One of the tasks that had to be done repeatedly was adding new Renderings to pages and changing Rendering data sources. Necessarily, I wrote a couple of functions to do so.
Adding a new rendering with its data source:
function Add-NewRendering { param ( $databaseName, # master $dataSourceID, # Sitecore ID of the Datasource Item $pageItem, # Sitecore ID of the Page Item where the Rendering will live $placeHolder, # Placeholder path $renderingItemID, # Sitecore ID of the Rendering Item under /sitecore/Layouts $renderingIndex # Index where the rendering will be inserted ) $renderingItem = Get-Item -Path "$($databaseName):$($renderingItemID)" if (-Not $renderingItem) { # Custom method to emit error messages to the console ErrorMessage -errMsg "Add-NewRendering: Could not fetch rendering item :$($databaseName):$($renderintItemID)" return } $renderingInstance = $renderingItem | New-Rendering -Placeholder $placeHolder $renderingInstance.Datasource = $dataSourceID if(-not $renderingIndex) { # Add-Rendering and Set-Rendering are the SPE-Provided methods Add-Rendering -Item $pageItem -Placeholder $placeHolder -Instance $renderingInstance -PassThru | Set-Rendering -Item $pageItem | Out-Null } else { # Add-Rendering and Set-Rendering are the SPE-Provided methods Add-Rendering -Item $pageItem -Placeholder $placeHolder -Instance $renderingInstance -PassThru | Set-Rendering -Item $pageItem -Index $renderingIndex | Out-Null } }
Changing the datasource of an existing rendering:
function Add-NewRenderingDatasource { param ( $databaseName, # master $dataSourceID, # Sitecore ID of the Datasource Item $pageItem, # Sitecore ID of the Page Item where the Rendering lives $placeHolder, # Placeholder path $renderingItemID # Sitecore ID of the Rendering Item under /sitecore/Layouts ) $renderingItem = Get-Item -Path "$($databaseName):$($renderingItemID)" if (-Not $renderingItem) { # Custom method to emit error messages to the console ErrorMessage -errMsg "Add-NewRenderingDatasource: Could not fetch rendering item :$($databaseName):$($renderintItemID)" return } $renderingInstance = Get-Rendering -Item $pageItem -Rendering $renderingItem if (-not $renderingInstance) { # Call the Add-NewRendering function, above $renderingInstance = Add-NewRendering -databaseName $databaseName -dataSourceID $dataSourceID -pageItem $pageItem -placeHolder $placeHolder -renderingItemID $renderingItemID -renderingIndex -1 } if ($renderingInstance) { $renderingInstance.Datasource = $dataSourceID Set-Rendering -Instance $renderingInstance -Item $pageItem } else { ErrorMessage "Add-NewRenderingDatasource: Could not create new renderingInstance for page: $($pageItem.Paths.FullPath)" } return $renderingInstance }