We had one requirement to change the component's display on almost 1400 pages and doing so we had to follow following things:
1. Update the rendering parameters on the item
$parameters = [ordered]@{"DisplayContentInCard" = "1"; "ApplyBackground" = "1"; "AlignImageRight" = "1" }
$rendering | Set-RenderingParameter -Parameter $parameters | Set-Rendering -Item $pageItem -FinalLayout
2. Update the datasource item's field data.
if ($datasource.StartsWith("local:")) {
$datasource = $datasource.Replace("local:", $pageItem.Paths.Path)
}
if ($datasource.StartsWith("/sitecore")) {
$datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
$datasourceItem = Get-Item -Path "master:$($datasourceItemNewVersion.FullPath)"
$quoteInitiation = "{0xxxxx0-FA49-445A-95FC-E3xxxxx1E3}"
if ($null -ne $dataSourceItem) {
$dataSourceItem.Editing.BeginEdit()
$dataSourceItem["quote"] = $quoteInitiation
$dataSourceItem["Link"] = ""
$dataSourceItem.Editing.EndEdit()
#$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
# Datasource item fields update - End
}
else {
Write-Host "Unable to process $($dataSourceItem.FullPath)"
}
}
else {
# this will execute when datasource is in GUID format
$datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
$datasourceItem = Get-Item "$($datasource)"
$quoteInitiation = "{03sss7FD0-FA49-445A-95FC-E35xxxxE3}"
if ($null -ne $dataSourceItem) {
$dataSourceItem.Editing.BeginEdit()
$dataSourceItem["quote"] = $quoteInitiation
$dataSourceItem["Link"] = ""
$dataSourceItem.Editing.EndEdit()
#$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
# Datasource item fields update - End
}
else {
Write-Host "Unable to process $($dataSourceItem.FullPath)"
}
}
3. Update the main page with one droplink field to be set with the specific item.
$defaultProductOptionItemId = "{E2xxxxx-5DD0-4188-ABED-5Axxxxx56}";
if ([string]::IsNullOrEmpty($pageItem["productionOption"])) {
$pageItem.Editing.BeginEdit()
$pageItem["productionOption"] = $defaultProductOptionItemId
$pageItem.Editing.EndEdit()
Publish-Item -Path "master:$($pageItem.FullPath)" -PublishMode Smart -Target Edge
}
4. Export the info in the excel
$props = @{
InfoTitle = "Quote Initiation."
InfoDescription = "Processing for quote initiation of City pages for Auto owners."
PageSize = 25
}
$items |
Show-ListView @props -Property @{Label = "Name"; Expression = { $_.DisplayName } },
@{Label = "Id"; Expression = { $_.Id } },
@{Label = "Template Name"; Expression = { $_.TemplateName } },
@{Label = "Path"; Expression = { $_.ItemPath } }
Now the complete script is as follows:
# Product City Page - Auto
function ProcessProductLocationPage_Auto {
$allItems = Get-ChildItem -Path "master://sitecore/content/SiteRoot/Home/States" -Recurse
ForEach ($item in $allItems) {
if ($item.TemplateName -match "City" -AND $item.Name -match "auto") {
$newItemVersion = Add-ItemVersion -Path "master:$($item.FullPath)"
$pageItem= Get-Item -Path "master:$($newItemVersion.FullPath)"
try {
# Update rendering parameters - Start
$fityFiftyRenderingId = "{3FXXXE058-F909-4813-B4AA-92XXXXX5DE}"
$defaultLayout = Get-LayoutDevice "Default"
$renderings = Get-Rendering -Item $pageItem-Device $defaultLayout -FinalLayout
$datasource = ""
foreach ($rendering in $renderings) {
if ($rendering.ItemId -eq $fityFiftyRenderingId) {
$parameters = [ordered]@{"DisplayContentInCard" = "1"; "ApplyBackground" = "1"; "AlignImageRight" = "1" }
$rendering | Set-RenderingParameter -Parameter $parameters | Set-Rendering -Item $pageItem-FinalLayout
$datasource = $rendering.Datasource
}
}
# Datasource item fields update - Start
# Check if the data source path has a special prefix
if ($datasource.StartsWith("local:")) {
$datasource = $datasource.Replace("local:", $pageItem.Paths.Path)
}
if ($datasource.StartsWith("/sitecore")) {
$datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
$datasourceItem = Get-Item -Path "master:$($datasourceItemNewVersion.FullPath)"
$quoteInitiation = "{0ddddD0-FA49-445A-95FC-E35dddddE3}"
if ($null -ne $dataSourceItem) {
$dataSourceItem.Editing.BeginEdit()
$dataSourceItem["quote"] = $quoteInitiation
$dataSourceItem["Link"] = ""
$dataSourceItem.Editing.EndEdit()
#$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
# Datasource item fields update - End
}
else {
Write-Host "Unable to process $($dataSourceItem.FullPath)"
}
}
else {
# this will execute when datasource is in GUID format
$datasourceItemNewVersion = Add-ItemVersion -Path "master:$($datasource)"
$datasourceItem = Get-Item "$($datasource)"
$quoteInitiation = "{0dddddD0-FA49-445A-95FC-E3xxxxx31E3}"
if ($null -ne $dataSourceItem) {
$dataSourceItem.Editing.BeginEdit()
$dataSourceItem["quote"] = $quoteInitiation
$dataSourceItem["Link"] = ""
$dataSourceItem.Editing.EndEdit()
#$item = Get-Item -Path "master:$($dataSourceItem.FullPath)"
Publish-Item -Path "master:$($dataSourceItem.FullPath)" -PublishMode Smart -Target Edge
# Datasource item fields update - End
}
else {
Write-Host "Unable to process $($dataSourceItem.FullPath)"
}
}
$defaultProductOptionItemId = "{Exxxx8D-5DD0-4188-ABED-5Axxxxx56}";
if ([string]::IsNullOrEmpty($pageItem["prodOption"])) {
$pageItem.Editing.BeginEdit()
$pageItem["prodOption"] = $defaultProductOptionItemId
$pageItem.Editing.EndEdit()
Publish-Item -Path "master:$($pageItem.FullPath)" -PublishMode Smart -Target Edge
}
}
catch [System.Net.WebException], [System.IO.IOException] {
Write-Host "Unable to process item " $pageItem.FullPath
}
$pageItem
}
}
}
$items = ProcessProductLocationPage_Auto
if ($items.Count -eq 0) {
Write-Host "Nothing found."
}
else {
$props = @{
InfoTitle = "Quote Initiation."
InfoDescription = "Your description here."
PageSize = 25
}
$items |
Show-ListView @props -Property @{Label = "Name"; Expression = { $_.DisplayName } },
@{Label = "Id"; Expression = { $_.Id } },
@{Label = "Template Name"; Expression = { $_.TemplateName } },
@{Label = "Path"; Expression = { $_.ItemPath } }
}
Write-Host "Script execution completed!"
Thanks!