Site icon Blog ARC Optimizer

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

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

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&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
Quitter la version mobile