Fermer

octobre 26, 2020

Modification des espaces réservés SXA après la création de contenu


La poursuite du développement de Sitecore sur un site déjà en ligne peut entraîner de nouveaux défis qui n'existaient pas avant la mise en service. Par exemple, si un composant particulier est déjà utilisé par les auteurs de contenu, vous ne souhaitez pas apporter de modifications audit composant qui interrompraient les utilisations préexistantes de celui-ci sur différentes pages.

Le problème

Vous risquez de vous retrouver besoin de modifier une clé d'espace réservé SXA dans laquelle un composant est inséré. Cela peut s'avérer assez difficile à faire si un composant est utilisé sur des centaines de pages sur un site en ligne car les détails de présentation de ce composant inséré ne sont pas automatiquement mis à jour lorsque vous modifiez la clé d'espace réservé SXA. Vous ne devez pas mettre à jour manuellement la clé d’espace réservé du composant pour qu'elle corresponde à la plus récente. Cela prend trop de temps et le composant serait masqué sur la page jusqu'à ce que son espace réservé soit mis à jour. Avec un grand site, cela peut entraîner de graves problèmes. La solution à ce problème? Utilisation de Sitecore PSE pour effectuer les travaux à l'échelle du site. Voici un script que vous pouvez utiliser pour faire le gros du travail:

Le script

 $ contentPath = "master: / sitecore / content / home"
$ deviceLayout = Get-LayoutDevice "Par défaut"
$ useFinalLayout = $ True
$ oldPlaceholderRegEx = "/ placeholder-entries-  d {1,}"
Write-Host "Recherche de pages sous Accueil ..."
$ items = Get-ChildItem -Path $ contentPath -Recurse

foreach ($ item en $ items) {
    $ renderings = Get-Rendering -Item $ item -Device $ deviceLayout -FinalLayout: $ useFinalLayout
    foreach ($ rendu dans $ rendus) {
        if ($ rendering.Placeholder -match $ oldPlaceholderRegEx) {
            $ dynamicPlaceholderNumber = $ Matches.0 -replace ' D + ( d +)', '$ 1'
            $ oldPlaceholder = $ rendering.Placeholder
            $ newPlaceholder = $ rendering.Placeholder -replace $ Matches.0
            $ newPlaceholder = $ newPlaceholder + "/ placeholder-1-" + $ dynamicPlaceholderNumber
            $ rendering.Placeholder = $ rendering.Placeholder -replace $ oldPlaceholder, $ newPlaceholder
            Set-Rendering -Item $ item -Instance $ rendering -FinalLayout: $ useFinalLayout
            Write-Host $ rendering.Placeholder
        }
    }
}
Write-Host "Done" 

La ruse d'une clé d'espace réservé SXA

La partie délicate de la mise à jour des clés d'espace réservé SXA sur les détails de présentation d'un composant particulier est que vous ne connaissez pas les nombres dynamiques utilisés pour créer cet espace réservé car ils ne sont pas universels. Par exemple, le composant A peut se trouver dans l'espace réservé SXA «/ placeholder-entries-1» sur une page et dans «/ content / placeholder-entries-2» sur une autre. Vous devez saisir ces différents numéros de manière appropriée pour mettre à jour la clé d'espace réservé SXA de manière appropriée. C’est ce que fait le script ci-dessus.

Parcourir le script

 Sitecore - Comprendre les approches de développement: une perspective de Sitecore

Parcourons le script ci-dessus avec un exemple. Ce script parcourt tous les éléments de page trouvés sous «/ sitecore / content / home». Supposons que le composant A sur l'une de ces pages se trouve dans l'espace réservé "/ trophies / placeholder-entries-4" et que la clé d'espace réservé SXA est "placeholder-entries". Nous avons décidé de changer la clé de substitution SXA en «placeholder».

Le bloc if dans la boucle foreach vérifiera si l'espace réservé contient l'ancien espace réservé («placeholder-entries-») en utilisant RegEx. Puisque nous avons trouvé une correspondance pour l'espace réservé du composant A dans les détails de la présentation, nous allons d'abord récupérer le numéro dynamique à la fin de l'espace réservé, 4.

Nous commencerons alors à construire la nouvelle clé d'espace réservé pour le composant A. Nous utiliserons la commande -replace RegEx pour se débarrasser de la sous-chaîne «placeholder-entries-4» dans la clé d'espace réservé «/ trophies / placeholder-entries-4». Nous la remplacerons ensuite par la nouvelle clé d'espace réservé SXA pour générer «/ trophies / placeholder-4». Après cela, nous mettons simplement à jour le rendu sur la mise en page finale de la page.

Qu'en est-il des composants imbriqués sous la nouvelle clé d'espace réservé SXA? Le script s'occupe de ça! En utilisant l'exemple ci-dessus, vous pouvez avoir des composants insérés dans "/ trophies / placeholder-entries-4 / my-other-placeholder-1". Le script extrayera exclusivement l'ancienne clé d'espace réservé SXA que vous essayez de remplacer et générera "/trophies/placeholder-4/my-other-placeholder-1" .[19659002[19659002)Commentmettreàjourcescriptpourvosclésd'espaceréservéSXA?

Mettez à jour le chemin du contenu pour qu'il corresponde à l'élément parent que vous souhaitez parcourir. Remplacez simplement la valeur de la variable $ oldPlaceholderRegEx par votre clé d'espace réservé SXA et mettez à jour la ligne attribuant la nouvelle clé d'espace réservé SXA au $ newPlaceholder. Par exemple, si votre ancienne clé d'espace réservé SXA était "my-items" et votre nouvelle clé d'espace réservé SXA était "my-items-placeholder", vous mettriez à jour ces trois lignes dans le script comme indiqué ci-dessous:

 $ contentPath = " master: / sitecore / content / home "
$ deviceLayout = Get-LayoutDevice "Par défaut"
$ useFinalLayout = $ True
$ oldPlaceholderRegEx = "/ mes-éléments-  d {1,}"
Write-Host "Recherche de pages sous Accueil ..."
$ items = Get-ChildItem -Path $ contentPath -Recurse

foreach ($ item en $ items) {
    $ renderings = Get-Rendering -Item $ item -Device $ deviceLayout -FinalLayout: $ useFinalLayout
    foreach ($ rendu dans $ rendus) {
        if ($ rendering.Placeholder -match $ oldPlaceholderRegEx) {
            $ dynamicPlaceholderNumber = $ Matches.0 -replace ' D + ( d +)', '$ 1'
            $ oldPlaceholder = $ rendering.Placeholder
            $ newPlaceholder = $ rendering.Placeholder -replace $ Matches.0
            $ newPlaceholder = $ newPlaceholder + "/ my-items-placeholder-1-" + $ dynamicPlaceholderNumber
            $ rendering.Placeholder = $ rendering.Placeholder -replace $ oldPlaceholder, $ newPlaceholder
            Set-Rendering -Item $ item -Instance $ rendering -FinalLayout: $ useFinalLayout
            Write-Host $ rendering.Placeholder
        }
    }
}
Write-Host "Done" 

Conclusion

La mise à jour des espaces réservés SXA après que les composants ont déjà été insérés dans les pages peut être une entreprise risquée. Ce script vous évitera les problèmes liés à ce changement. Cheers!






Source link