Fermer

mars 6, 2025

Mapping Bootstrap Grid Paramètres / Blogs / Ferfient

Mapping Bootstrap Grid Paramètres / Blogs / Ferfient


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):

Entrées bootstrap dans l'arbre de contenu Sitecore.

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:

Paramètres de grille de site sans tête

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 .:

Paramètres de rendu de la grille

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&amp;GridParameters=%7b7465D855-992E-4DC2-9855-A03250DFA74B%7d&amp;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, GridParameters Ce 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.

Bootstrap 5 taille 12

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:

Exemple de paramètres de bootstrap 5

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&amp;FieldNames&amp;BackgroundImage&amp;Styles=%7B6221E315-B00F-4832-9054-B46F347EC247%7D&amp;RenderingIdentifier&amp;CSSStyles&amp;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:

    1. Le script est destiné à être exécuté via l’interface PowerShell ISE dans Sitecore.
    2. 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.
    3. 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.
    4. 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.
    5. 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