Skip to content

Instantly share code, notes, and snippets.

@BillCacy
Created December 2, 2021 01:33
Show Gist options
  • Save BillCacy/b69eb147cba41d72e1261069b4f6889a to your computer and use it in GitHub Desktop.
Save BillCacy/b69eb147cba41d72e1261069b4f6889a to your computer and use it in GitHub Desktop.
Sitecore Powershell Script to replace existing rendering with a new rendering
Set-Location master:
function Get-ItemBasedOnTemplate {
param(
[string]$TemplateId
)
$queue = New-Object System.Collections.Queue
$processedLookup = New-Object System.Collections.Generic.HashSet[string]
if(-not(Test-Path -Path "master:$($TemplateId)")) { return }
$processedLookup.Add($TemplateId) > $null
Get-ItemReferrer -Id $TemplateId -ItemLink |
Where-Object { $_.SourceItemID } |
ForEach-Object { $queue.Enqueue($_.SourceItemID) }
$database = Get-Database -Name "master"
while($queue.Count -and ($referrerId = $queue.Dequeue())) {
if($processedLookup.Contains($referrerId)) { continue }
$processedLookup.Add($referrerId) > $null
$referrer = $database.GetItem($referrerId)
if(!$referrer) { continue }
if($referrer.Paths.FullPath.StartsWith("/sitecore/templates")) {
if($referrer.Name -eq "__Standard values") { continue }
foreach($referrerItemLink in Get-ItemReferrer -Id $referrerId -ItemLink | Where-Object { $_.SourceItemID }) {
$queue.Enqueue($referrerItemLink.SourceItemID)
}
$itemTemplate = [Sitecore.Data.Managers.TemplateManager]::GetTemplate($referrerId, $database)
} else {
$itemTemplate = [Sitecore.Data.Managers.TemplateManager]::GetTemplate($referrer)
}
if ($itemTemplate -and $itemTemplate.DescendsFromOrEquals($TemplateId)) {
$referrer
}
}
}
$baseTemplateId = "{68165A40-EE21-4D71-866D-4C0373FFA95E}"
$items = Get-ItemBasedOnTemplate -TemplateId $baseTemplateId
# 3 existing datasource options for the reference header
$rrHeaderId = "{7EA088EF-195D-469B-BE5F-3E5C47087F65}"
$rrHeaderTransparentId = "{14A7A8E1-24D2-4B1E-AAEC-F76DA4AD9AA9}"
$rrHeaderTransparentNoSearchId = "{A94FAE44-775D-453B-8C67-CCBA4F5D8AAE}"
$rrHeader = gi master:// -id $rrHeaderId
$rrHeaderTransparent = gi master:// -id $rrHeaderTransparentId
$rrHeaderTransparentNoSearch = gi master:// -id $rrHeaderTransparentNoSearchId
# 3 new datasource options for the new header
$newHeader = gi master:// -id "{F80A4E6D-A356-4709-8E68-4AB54F1E7C1A}"
$newHeaderTransparent = gi master:// -id "{A5390E81-6AC4-44C5-9E90-8FA255B13AA2}"
$newHeaderTransparentNoSearch = gi master:// -id "{7A84AE40-1118-427B-AE20-35187220963E}"
# rendering to use in place of existing
$newHeaderRendering = gi -Path master:\layout\Renderings\SITE\Project\Website\Sublayouts\Header | New-Rendering -Placeholder "header"
# rendering to get rid of
$referencedRendering = gi -Path "master:\layout\Renderings\SITE\Project\Website\Reference Renderings\Header Reference Rendering"
$counter = 0
foreach($i in $items){
Write-Host "Updating " $i.Paths.Path
$existingRendering = Get-Rendering -Item $i -Rendering $referencedRendering
if($null -ne $existingRendering){
$existingDatasource = $existingRendering.Datasource
if($null -ne $existingDatasource){
$newDatasource = switch($existingDatasource){
$rrHeaderId { $newHeader }
$rrHeaderTransparentId { $newHeaderTransparent }
$rrHeaderTransparentNoSearchId { $newHeaderTransparentNoSearch }
}
# Remove the existing Header Reference Rendering
Remove-Rendering -Item $i -Rendering $referencedRendering
# Add the new header rendering to the "header" placeholder
Add-Rendering -Item $i -Rendering $newHeaderRendering -Placeholder "header" -Datasource $newDatasource.Paths.Path
$counter++
}
}
}
Write-Host "Done! Replaced renderings on " $counter " items"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment