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