Created
December 2, 2021 01:33
-
-
Save BillCacy/b69eb147cba41d72e1261069b4f6889a to your computer and use it in GitHub Desktop.
Sitecore Powershell Script to replace existing rendering with a new rendering
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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