Intro đ
Tout en travaillant sur un projet rĂ©cent pour migrer une solution Sitecore 9.1 Ă Sitecore XM Cloud, une situation intĂ©ressante est apparue avec les paramĂštres de la grille bootstrap. Plus prĂ©cisĂ©ment, avec des paramĂštres de rendu de grille configurĂ©s sur les rendus migrĂ©s de lâarborescence de contenu Legacy 9.1 dans lâarborescence de contenu XM Cloud.
Pour commencer, quelques antĂ©cĂ©dents (brefs?) Sxa et le systĂšme de grille. SXA comprend plusieurs systĂšmes de grille Ă lâextĂ©rieur de la boĂźte (rĂ©fĂ©rence), y compris bootstrap 4 (BS4) et bootstrap 5 (BS5). Ces systĂšmes de grille permettent aux dĂ©veloppeurs de construire des dispositions rĂ©actives dâune maniĂšre cohĂ©rente et prĂ©visible. Lors de lâajout dâun nouveau site sans tĂȘte dans XM Cloud, BS5 est le systĂšme de grille par dĂ©faut (rĂ©fĂ©rence). Les Ă©lĂ©ments de support Sitecore pour les diffĂ©rents systĂšmes de grille peuvent ĂȘtre trouvĂ©s dans lâarbre de contenu sous / Sitecore / System / ParamĂštres / fonctionnalitĂ© / accĂ©lĂ©rateur dâexpĂ©rience (BS4 et BS5 sont mis en Ă©vidence dans la capture dâĂ©cran ci-dessous, mais il y en a dâautres):
Le ou les systĂšmes de grille quâun site utilise peut ĂȘtre configurĂ© sur le site ParamĂštres Article, par exemple, / Sitecore / Content / Test Site Collection / Site sans tĂȘte A / ParamĂštres:
Lors de la modification dâun rendu sur une page dans lâĂ©diteur de contenu, lâexpĂ©rience de lâĂ©diteur ou des pages cloud XM (qui Ă©tait rĂ©cemment mis Ă jour đ), les auteurs de contenu peuvent configurer la grille et dĂ©finir des choses comme les tailles de colonne, les dĂ©calages, lâordre, etc .:
Ces paramĂštres de la grille sont stockĂ©s comme un seul paramĂštre de rendu nommĂ© GridParameters associĂ© au rendu des parents dans la page Rendu et / ou Rendements finaux champ. Par exemple, en supposant un RĂ©cipient le rendu a le Taille ParamĂštres reprĂ©sentĂ©s dans lâanimation ci-dessus (ce qui signifie: mobile | Taille | 12), la valeur brute du rendu dans les dĂ©tails de prĂ©sentation ressemblerait Ă ceci:
<r uid="{FE9A8A21-02C7-4EB0-B1B1-DF67ADD29ADD}"
...
s:par="?Styles=%7b6221E315-B00F-4832-9054-B46F347EC247%7d&GridParameters=%7b7465D855-992E-4DC2-9855-A03250DFA74B%7d&DynamicPlaceholderId=1"
s:ph="headless-main" />
Le s:par Lâattribut stocke une chaĂźne de requĂȘte codĂ©e par URL contenant les paramĂštres de rendu. La valeur de GridParameters est «% 7B7465D855-992E-4DC2-9855-A03250DFA74B% 7D», ou, lorsque URL dĂ©codĂ©, «{7465D855-992E-4DC2-9855-A03250DFA74B}». Cela ressemble beaucoup Ă un ID dâarticle Sitecore, non?
đ Notez que, sâil y avait plus dâun paramĂštre de grille,
GridParametersCe serait une chaĂźne dâID dĂ©limitĂ© («|»).
LâID pointe vers lâĂ©lĂ©ment de dĂ©finition de la taille de la grille situĂ© Ă (dans ce cas, pour BS5) / Sitecore / System / Settings / Feature / Experience Accelerator / Bootstrap 5 / bootstrap 5 DĂ©finition de grille / Extra Small / Size / 12. Enfin, dans le cadre de la dĂ©finition de lâĂ©lĂ©ment de taille, la classe Bootstrap CSS applicable est spĂ©cifiĂ©e dans le Classe champ. Câest cette classe (ou des classes, si plusieurs paramĂštres de grille sont spĂ©cifiĂ©s) qui est appliquĂ© au balisage lorsque le composant est rendu dans lâinterface utilisateur.
Pour un exemple un peu plus «monde réel», supposons un Récipient Le rendu avait (BS5) des paramÚtres de grille qui ressemblaient à ceci:
La valeur du GridParameters Le paramĂštre de rendu serait:
<r uid="{FE9A8A21-02C7-4EB0-B1B1-DF67ADD29ADD}"
...
s:par="GridParameters=%7B7465D855-992E-4DC2-9855-A03250DFA74B%7D%7C%7B597223E6-B7EE-4D86-BC89-F7DA3DE8A7E5%7D%7C%7B7D865A50-F089-421E-ACDC-620DB03BC49D%7D&FieldNames&BackgroundImage&Styles=%7B6221E315-B00F-4832-9054-B46F347EC247%7D&RenderingIdentifier&CSSStyles&DynamicPlaceholderId=1"
s:ph="headless-main" />
Qui, dĂ©codĂ© par URL serait: «{7465d855-992e-4dc2-9855-a03250dfa74b} | {597223e6-b7ee-4d86-bc89-f7da3de8a7e5} | {7d865a50-f089-421e-acdc-620db03bc49dâ.
Le JSON retiré du service de mise en page pour le rendu ressemblerait à ceci:
...
"uid": "fe9a8a21-02c7-4eb0-b1b1-df67add29add",
"componentName": "Container",
"dataSource": "",
"params": {
"GridParameters": "col-12 col-md-10 col-xl-5", // <=== HERE
"Styles": "container",
"DynamicPlaceholderId": "1",
"FieldNames": "Default"
}
...
Et, enfin, le balisage qui en résulterait ressemblerait à ceci:
<div class="col-12 col-md-10 col-xl-5"> ... </div>
Pour le reste de ce post, supposons ce qui suit:
- La solution Legacy 9.1 a utilisé BS4.
- La solution XM Cloud a utilisé BS5 (mais supportée BS4).
- Les rendus Legacy 9.1 ont été migrés vers XM Cloud (et convertis en rendu JSON).
- Les rendus migrĂ©s ont Ă©tĂ© mis en Ćuvre et apparaissent comme prĂ©vu dans lâinterface utilisateur de lâapplication de tĂȘte, avec le attendu / correct CLASSES DE GRID CSS.
Le problĂšme đ âïž
Dâaccord, alors quel est le problĂšme? Nous avons BS4 et BS5 disponibles dans XM Cloud et les rendus migrĂ©s Ă©mettent les styles de grille corrects dans le balisage (par exemple, col-12). Quel est le problĂšme?
Le problĂšme est survenu lorsque les auteurs de contenu sont allĂ©s afficher et / ou mettre Ă jour les paramĂštres de style de grille, soit dans lâĂ©diteur de contenu, lâĂ©diteur dâexpĂ©rience ou les pages cloud XM. Il nây avait pas dâerreur ou quoi que ce soit, mais rien est apparu dans le Grille Onglet ou le AvancĂ© onglet Lors de la modification des paramĂštres de rendu pour le rendu, comme si les paramĂštres nâĂ©taient pas là ⊠đ€.
Lors de la visualisation des valeurs brutes du Rendu et Rendements finaux champs de la page, le GridParameters Le paramĂštre Ă©tait clairement prĂ©sent â alors pourquoi rien nâapparaissait dans lâinterface utilisateur dâĂ©dition pour les auteurs de contenu?
La cause đ
Comme vous lâavez peut-ĂȘtre dĂ©jĂ devinĂ© (et, oui, cela semble Ă©vident maintenant), la raison en Ă©tait que Les ID dâĂ©lĂ©ment rĂ©fĂ©rencĂ©s dans le paramĂštre de rendu de la grille sont diffĂ©rents entre BS4 et BS5, MĂȘme pour deux Ă©lĂ©ments de dĂ©finition de la taille de la grille avec la mĂȘme classe CSS. Par exemple, le col-12 Article pour BS4 (/ Sitecore / System / Settings / Feature / Experience Accelerator / Bootstrap 4 / bootstrap 4 DĂ©finition de grille / Extra Small / Size / 12) nâavait pas la mĂȘme piĂšce dâidentitĂ© que le correspondant col-12 Article dans BS5 (/ Sitecore / System / Settings / Feature / Experience Accelerator / Bootstrap 5 / bootstrap 5 DĂ©finition de grille / Extra Small / Size / 12).
Parce que la nouvelle solution XM Cloud avait Ă la fois les Ă©lĂ©ments de support BS4 et BS5 disponibles sous / Sitecore / System / ParamĂštres / fonctionnalitĂ© / accĂ©lĂ©rateur dâexpĂ©rienceles classes BS4 Grid CSS passaient encore dans lâinterface utilisateur. Cependant, lors de lâĂ©dition, le modal des paramĂštres de rendu sâattendait Ă ce que les ID BS5 (puisque le site a Ă©tĂ© configurĂ© pour utiliser BS5) pour lier les contrĂŽles dâĂ©dition. Ătant donnĂ© quâaucun ID de paramĂštre BS5 nâa Ă©tĂ© trouvĂ©, les contrĂŽles dâĂ©dition dans le modal nâĂ©taient pas liĂ©s aux valeurs correctes et semblaient cassĂ©s pour les auteurs de contenu.
La solution â
Comme dâhabitude, Extensions de PowerShell Sitecore (Spe) Ă la rescousse. Un script PowerShell a Ă©tĂ© Ă©crit pour itĂ©rer sur les rendus de page, mappez les ID de paramĂštre Bootstrap 4 Ă leurs ID de paramĂštre Bootstrap 5 Ă©quivalents basĂ©s sur une correspondance de nom de classe CSS, si possible, puis enregistrez les paramĂštres de rendu mis Ă jour vers la page.
â Dans certains cas, il nâa pas Ă©tĂ© possible de cartographier les paramĂštres entre les deux systĂšmes de grille car il y a des changements de rupture entre BS4 et BS5. Dans BS4, par exemple, certains Commande des dĂ©finitions existent qui nâexistent pas dans BS5, câest-Ă -dire, / Sitecore / System / Settings / Feature / Experience Accelerator / Bootstrap 4 / bootstrap 4 DĂ©finition de grille / Extra Small / Order / 6.
Heureusement, dans le cas de ce projet particulier, la grande majoritĂ© des paramĂštres avaient un Ă©quivalent BS5 et ont Ă©tĂ© remappĂ©s par la tendance, permettant aux paramĂštres de rendu modal de reflĂ©ter correctement les paramĂštres de rĂ©seau actuels pour les auteurs de contenu. âš
Le script â
Mise Ă jour-grudParameters.PS1
Quelques faits saillants du script et comment cela fonctionne:
-
- Le script est destinĂ© Ă ĂȘtre exĂ©cutĂ© via lâinterface PowerShell ISE dans Sitecore.
- Mettre Ă jour le -Chemin paramĂštre en fonction de lâendroit oĂč vivent vos pages de contenu dans lâarbre; Je recommanderais dâexĂ©cuter le script sur un sous-ensemble dâĂ©lĂ©ments initialement.
- Le script Ă©met un rapport en utilisant le Show-listview commander qui Ă©numĂšre quels rendements et paramĂštres ont Ă©tĂ© mis Ă jour (ou que ne le fera pas ĂȘtre mis Ă jour); Le rapport peut ĂȘtre exportĂ© si vous en avez besoin, disons, de le joindre Ă un Ă©lĂ©ment de travail dans Azure DevOps ou Jira.
- Si un ID de paramĂštre de rendu de grille ne peut pas ĂȘtre mappĂ© sur un ID BS5 ou si lâID candidat nâest pas un ID BS4 (y compris si câest dĂ©jĂ Un ID BS5), puis il est sautĂ© mais apparaĂźt toujours dans le rapport.
- Garder le -Et si DĂ©finissez jusquâĂ ce que vous soyez prĂȘt Ă appliquer les mises Ă jour.
Voici le script:
Function Update-GridParameters {
<#
.SYNOPSIS
Maps Bootstrap 4 grid rendering parameters to Bootstrap 5 grid rendering parameters.
.DESCRIPTION
This function maps Bootstrap 4 grid rendering parameter IDs to their Bootstrap 5 equivalent rendering parameter IDs, if possible.
.NOTES
Nick Sturdivant | Perficient | nick.sturdivant@perficient.com | https://www.linkedin.com/in/nicksturdivant/
#>
param
(
[Parameter()]
[String] $Path,
[Parameter()]
[Switch] $WhatIf
)
BEGIN {
Write-Host "Beginning $($MyInvocation.MyCommand)"
}
PROCESS {
# get bootstrap 4 grid parameter definitions
$bs4GridParameters = Get-ChildItem -Path "/sitecore/system/Settings/Feature/Experience Accelerator/Bootstrap 4/Bootstrap 4 Grid Definition" -Recurse `
| Where-Object {
$_.TemplateID -eq "{CB3B3906-BE80-4D9B-A2A4-038193DA5422}" # /sitecore/templates/Foundation/Experience Accelerator/Grid/Grid Definition Items/Class
}
# get bootstrap 5 grid parameter definitions
$bs5GridParameters = Get-ChildItem -Path "/sitecore/system/Settings/Feature/Experience Accelerator/Bootstrap 5/Bootstrap 5 Grid Definition" -Recurse `
| Where-Object {
$_.TemplateID -eq "{CB3B3906-BE80-4D9B-A2A4-038193DA5422}" # /sitecore/templates/Foundation/Experience Accelerator/Grid/Grid Definition Items/Class
}
# build mapping
$bs4To5Mappings = @()
foreach ($bs4GridParameter in $bs4GridParameters) {
# match bootstrap 5 parameter based on class name
$bs5GridParameter = $bs5GridParameters | Where-Object { $_.Fields["Class"].Value -eq $bs4GridParameter.Fields["Class"].Value }
if ($null -ne $bs5GridParameter) {
$bs4To5Mappings += [PSCustomObject]@{
BS4Id = $bs4GridParameter.ID
BS4Class = $bs4GridParameter.Fields["Class"].Value
BS5Id = $bs5GridParameter.ID
BS5Class = $bs5GridParameter.Fields["Class"].Value
}
}
}
$report = @()
Write-Host "Processing $Path..." -ForegroundColor Cyan
# get children based on path parameter, filtering to only those items with a rendering defined in their final layout
$items = Get-ChildItem -Path $Path -Recurse | Where-Object { ($null -ne (Get-Rendering -Item $_ -FinalLayout)) }
foreach ($item in $items) {
$renderings = Get-Rendering -Item $item -FinalLayout
if ($null -ne $renderings) {
foreach ($rendering in $renderings) {
# get grid rendering parameter
$renderingParameter = Get-RenderingParameter -Rendering $rendering -Name "GridParameters"
if ($null -ne $renderingParameter) {
Write-Host "Processing grid rendering parameters on item $($item.ID), rendering $($rendering.UniqueId)..." -ForegroundColor Green
$gridParametersIdString = $renderingParameter["GridParameters"]
if (-not [string]::IsNullOrWhiteSpace($gridParametersIdString)) {
$gridParameterIds = $gridParametersIdString.Split("|")
$newGridParameterIds = @()
foreach ($gridParameterId in $gridParameterIds) {
# check if the parameter is bootstrap 4
$mappedParameter = $bs4To5Mappings | Where-Object { $_.BS4Id.ToString() -eq $gridParameterId } | Select-Object -First 1
if ($null -eq $mappedParameter) {
$message = "Grid parameter ID $gridParameterId is not a Bootstrap 4 parameter that can be mapped to a Bootstrap 5 parameter, retaining original ID."
Write-Host $message -ForegroundColor Yellow
$report += @{
ItemId = $item.ID
ItemPath = $item.FullPath
RenderingItemId = $rendering.ItemID
RenderingUniqueId = $rendering.UniqueId
CurrentGridParameterId = $gridParameterId
MappedGridParameterId = "N/A"
GridClassName = "N/A"
Notes = $message
}
$newGridParameterIds += $gridParameterId
# process next parameter
continue
}
# map to bootstrap 5 parameter
$report += @{
ItemId = $item.ID
ItemPath = $item.FullPath
RenderingItemId = $rendering.ItemID
RenderingUniqueId = $rendering.UniqueId
CurrentGridParameterId = $gridParameterId
MappedGridParameterId = $mappedParameter.BS5Id.ToString()
GridClassName = $mappedParameter.BS5Class
Notes = "Mapping Bootstrap 4 grid parameter ID $gridParameterId to Bootstrap 5 grid parameter ID $($mappedParameter.BS5Id.ToString())."
}
$newGridParameterIds += $mappedParameter.BS5Id.ToString()
}
$newGridParametersIdString = $newGridParameterIds -join "|"
Write-Host "Current: $gridParametersIdString"
Write-Host "Mapped: $newGridParametersIdString"
if ($gridParametersIdString -eq $newGridParametersIdString) {
Write-Host "Current and mapped grid parameters match, skipping update..." -ForegroundColor Yellow
# process next rendering
continue
}
# set new rendering parameter
$setMessage = "Setting new grid parameters on item $($item.ID) ($($item.FullPath)), rendering $($rendering.UniqueId)..."
Write-Host $setMessage -ForegroundColor Yellow
$newGridParameters = [Ordered]@{"GridParameters" = $newGridParametersIdString }
$report += @{
ItemId = $item.ID
ItemPath = $item.FullPath
RenderingItemId = $rendering.ItemID
RenderingUniqueId = $rendering.UniqueId
CurrentGridParameterId = $gridParametersIdString
MappedGridParameterId = $newGridParametersIdString
GridClassName = ""
Notes = "$setMessage ($gridParametersIdString ==> $newGridParametersIdString)"
}
if (-not $WhatIf) {
# update new grid parameters and then update the rendering
$rendering | Set-RenderingParameter -Parameter $newGridParameters | Set-Rendering -Item $item -FinalLayout
}
}
}
}
}
}
# display report
$report |
Show-ListView -Property @{ Label = "Item ID"; Expression = { $_.ItemId } },
@{Label = "Item Path"; Expression = { $_.ItemPath } },
@{Label = "Rendering Item ID"; Expression = { $_.RenderingItemId } },
@{Label = "Rendering Unique ID"; Expression = { $_.RenderingUniqueId } },
@{Label = "Current Grid Parameter ID"; Expression = { $_.CurrentGridParameterId } },
@{Label = "Mapped Grid Parameter ID"; Expression = { $_.MappedGridParameterId } },
@{Label = "Grid Class Name"; Expression = { $_.GridClassName } },
@{Label = "Notes"; Expression = { $_.Notes } }
}
END {
Write-Host "Ending $($MyInvocation.MyCommand)"
}
}
# 1. Change the Path parameter as necessary, depending on where the content pages are in the tree.
# 2. Use the -WhatIf switch to preview the changes; remove the switch to update the renderings and pages.
Update-GridParameters -Path "/sitecore/content/Test Site Collection/Headless Site A" -WhatIf
Script bonus đ
Mon collĂšgue (et MVP Sitecore) Eric Sanner Il est arrivĂ© dâĂ©crire un script similaire rĂ©cemment. Je ne peux ni confirmer ni nier que nous avons Ă©crit tous les deux deux scripts pour faire la mĂȘme chose Ă peu prĂšs au mĂȘme moment. Son script peut ĂȘtre trouvĂ© ci-dessous et illustre une autre approche pour rĂ©soudre le mĂȘme problĂšme. Merci pour le partage, Eric!
Bs4tobs5.ps1
<#
.SYNOPSIS
Update Final Layouts
.DESCRIPTION
Find bootstrap4 grid settings in final layout and convert to bootstrap5
.NOTES
Eric Sanner | Perficient | eric.sanner@perficient.com | https://www.linkedin.com/in/ericsanner/
#>
#BEGIN Config
$database = "master"
$allowDelete = $false
#END Config
#BEGIN Helper Functions
function Write-LogExtended {
param(
[string]$Message,
[System.ConsoleColor]$ForegroundColor = $host.UI.RawUI.ForegroundColor,
[System.ConsoleColor]$BackgroundColor = $host.UI.RawUI.BackgroundColor
)
Write-Log -Object $message
Write-Host -Object $message -ForegroundColor $ForegroundColor -BackgroundColor $backgroundColor
}
function Strip-Html {
#https://www.regular-expressions.info/lookaround.html#lookahead Replaces multiple spaces with a single space
param (
[string]$text
)
$text = $text -replace '<[^>]+>',' '
$text = $text -replace " (?= )", "$1"
$text = $text.Trim()
return $text
}
function Truncate-Output {
param (
$obj,
$maxLeng
)
$ret = "";
if($obj -ne $null)
{
$str = $obj.ToString().Trim()
$leng = [System.Math]::Min($str.Length, $maxLeng)
$truncated = ($str.Length -gt $maxLeng)
$ret = $str.Substring(0, $leng)
if($truncated -eq $true)
{
$ret = $ret + "..."
}
}
return $ret
}
#END Helper Functions
#BEGIN Sitecore Functions
function Get-SitecoreItemById {
param(
[string]$id
)
return Get-Item -Path $database -ID $id -ErrorAction SilentlyContinue
}
function Update-SitecoreItem {
param(
[Sitecore.Data.Items.Item]$item,
[System.Collections.Hashtable]$updates
)
if($item -eq $null)
{
Write-LogExtended "[E] Error updating item $($item) - Item is null" Red
return
}
if($updates -eq $null)
{
Write-LogExtended "[E] Error updating item $($item) - Update hashtable is null" Red
return
}
$changeDetected = $false
$foregroundColor = "Green"
Write-LogExtended "[I] Updating Item $($item.ID) - $($item.Name)"
$item.Editing.BeginEdit()
foreach($key in $updates.GetEnumerator())
{
if($item.($key.Name) -ne $null)
{
$output = "Field Name '$($key.Name)' Current Value: '$(Truncate-Output $item.($key.Name) 40)' New Value: '$(Truncate-Output $key.Value 40)'"
if($item.($key.Name) -ne $key.Value)
{
Write-LogExtended "[U] $($output)"
$item.($key.Name) = $key.Value
$changeDetected = $true
}
else
{
Write-LogExtended "[-] $($output)"
}
}
}
$itemModified = $item.Editing.EndEdit()
if($changeDetected -ne $itemModified)
{
$foregroundColor = "Red"
}
Write-LogExtended "[I] Change Detected: $($changeDetected) Item modified $($itemModified)" $foregroundColor
}
#END Sitecore Functions
#BEGIN Conversion Functions
function ProcessItem {
param(
[Sitecore.Data.Items.Item]$item
)
Write-LogExtended "[I] Processing item $($item.ID): $($item.ItemPath)"
$gridPattern = "GridParameters=%7B(\w{8}-\w{4}-\w{4}-\w{4}-\w{12})%7D"
$bs4Pattern = "Bootstrap 4"
$finalRenderings = $item["__Final Renderings"]
$finalRenderingsNew = $item["__Final Renderings"]
$gridRenderings = @{}
$gridMatches = Select-String -InputObject $finalRenderings -Pattern $gridPattern -AllMatches
foreach($gridMatch in $gridMatches.Matches)
{
if(!$gridRenderings.ContainsKey("$($gridMatch.Groups[1].Value)"))
{
$gridRenderingItem = Get-SitecoreItemById $gridMatch.Groups[1].Value
$gridRenderings["$($gridMatch.Groups[1].Value)"] = $gridRenderingItem.ItemPath
}
}
foreach($rendering in $gridRenderings.GetEnumerator())
{
$bs4Matches = Select-String -InputObject $rendering.Value -Pattern $bs4Pattern
if($bs4Matches)
{
Write-LogExtended "[I] Found BS4 GridParams $($rendering.Value)" -ForegroundColor "Red"
$bs4Items.Add($item.ID, $item.Path)
if($bs4ToBs5Mapping.ContainsKey($rendering.Name))
{
Write-LogExtended "[I] Mapping $($rendering.Name) to $($bs4ToBs5Mapping[$rendering.Name])" -ForegroundColor "Green"
$finalRenderingsNew = $finalRenderingsNew -replace $rendering.Name, $bs4ToBs5Mapping[$rendering.Name]
}
else
{
Write-LogExtended "[E] No Mapping Found for $($rendering.Name)" -ForegroundColor "Red"
}
}
}
if($update -and $finalRenderings -ne $finalRenderingsNew)
{
$updates = @{}
$updates.Add("__Final Renderings", $finalRenderingsNew)
Update-SitecoreItem $item $updates
}
}
#END Conversion Functions
#BEGIN Main
$update = $true
$bs4Items = @{}
$bs4ToBs5Mapping = @{}
#/sitecore/system/Settings/Feature/Experience Accelerator/Bootstrap 4/Bootstrap 4 Grid Definition/Extra small/Size/12 -> /sitecore/system/Settings/Feature/Experience Accelerator/Bootstrap 5/Bootstrap 5 Grid Definition/Extra small/Size/12
$bs4ToBs5Mapping.Add("908E2BC6-C110-4ED7-AF39-7EEACBB31A34", "7465D855-992E-4DC2-9855-A03250DFA74B")
#/sitecore/system/Settings/Feature/Experience Accelerator/Bootstrap 4/Bootstrap 4 Grid Definition/Extra small/Size/8 -> /sitecore/system/Settings/Feature/Experience Accelerator/Bootstrap 5/Bootstrap 5 Grid Definition/Extra small/Size/8
$bs4ToBs5Mapping.Add("D65D90FB-45BF-4A04-A1EA-6F348E7CCBEA", "F2A11D85-8B09-40AC-B5D8-A9E1025F899D")
$parentPath = "master:/sitecore/content/<tenantName>/<siteName>/Home"
$childItems = Get-ChildItem -Path $parentPath -Recurse
$childItems | ForEach-Object {
ProcessItem $_
}
Write-LogExtended "[I] Found $($bs4Items.Count) Items that reference BS4"
#END Main
Merci pour la lecture! đ
Source link

