Sitecore Powershell Extension – zmiana rendering/sublayout w itemach

Dzisiaj pod lupę wezmę zmiany sublayout’ów czy inaczej nazywanych Rendering-ów.

W ostatnim wpisie pokazałem jak zainstalować edytor i środowisko do uruchomienia powershell-a w sitecore oraz jak zmienić layout na wielu itemach. Jeżeli ominął Cię ten wpis to możesz go znaleźć tutaj jest tam lista wymagań biznesowych, które miały być spełnione przy tym zadaniu.

Zmiana Rendering

Na pierwszy ogień pójdzie zmiana aktualnie używanego rendering-u. Zaczynamy

$allItems = Get-ChildItem -Path 'master://sitecore/content/Home/Subpages/' -Language de -Recurse

$baseStandardPage = Get-Item -Path 'master://sitecore/layout/Sublayouts/Base Standard Page'
$newHomePage  = Get-Item -Path "master://sitecore/layout/Sublayouts/Base New Homepage"

Write-Host 'Rendering ID: ' $baseStandardPage.ID

Write-Host 'all items related to image: ' $allItems.Count

ForEach($item in $allItems)
{
    Write-Host 'item processing'
    Write-Host $item.FullPath
    
    $instance = Get-Rendering -Item $item -PlaceHolder 'main'

    if($instance -and $instance.ItemID -NotMatch $newHomePage.Id -and $instance.ItemID -Match $baseStandardPage.ID)
    {
        Write-Host 'Change rendering from: ' $instance.ItemID ' to: ' $newHomePage.Id
        $instance.ItemId = $newHomePage.Id
        Set-Rendering -Item $item -Instance $instance -PlaceHolder 'main'
        Write-Host 'Change  rendering ended'
    }

    Write-Host 'item processing end'
}

Write-Host 'End'
  • biorę wszystkie itemy które będziemy zmieniać (w moim przypadku są umiejscowione w drzewie contentu pod /content/Home/Subpages)
  • wyciągam aktualnie używany Sublayout $baseStandardPage
  • pobieram nowy Sublayout na który chcemy zmienić aktualny $newHomePage
  • wybieram Rendering z aktualnie przetwarzanego itemu osadzonego w placeholderze o nazwie „main
  • porównuję czy aktualny Sublayout nie jest tym samym co ten na który ma być zmieniony oraz czy jest tym Sublayout, który chcę zmienić
  • jeżeli wcześniejszy warunek jest spełniony to zmieniam przypisany Sublayout do wyciągniętego Rendering-u przy pomocy zmiany właściwości Renderingu ItemID na ID nowego Sublayout-u

Usuwanie renderingu

Kolejną rzeczą, którą musiałem zrobić to usunięcie Renderingu wykorzystującego jeden z konkretnych Sublayout-ów

$allItems = Get-ChildItem -Path 'master://sitecore/content/Home/Subpages/' -Language de -Recurse
Write-Host 'Rendering ID: ' $baseStandardPage.ID

Write-Host 'all items related to image: ' $allItems.Count

$allrenderingsToRemove = Get-ChildItem -Path 'master://sitecore/layout/Sublayouts/Social Media' -Recurse

ForEach($item in $allItems)
{
    Write-Host 'item processing'
    Write-Host $item.FullPath

    $renderings = Get-Rendering -Item $item -PlaceHolder 'content'
    foreach($rendering in $renderings)
    {
        foreach($sublayoutToRemove in $allSublayoutsToRemove ){
            if($rendering.ItemID -eq $sublayoutToRemove.ID){
                Remove-Rendering -Item $item -Instance $rendering
                Write-Host 'sublayout removed ' $sublayoutToRemove.ID
            }
        }
    }
    
    Write-Host 'item processing end'
}

Write-Host 'End'
  • biorę wszystkie itemy które będziemy zmieniać (w moim przypadku są umiejscowione w drzewie contentu pod /content/Home/Subpages)
  • pobieram wszystkie sublayout-y, które muszę usunąć $allRenderingsToRemove
  • następnie przechodzę przez wszystkie Rendering-i oraz iteruję po wszystkich wcześniej wyciągniętych Sublayout-ach do usunięcia
  • sprawdzam czy aktualnie przetwarzany Rendering zawiera jeden z Sublayout-ów przeznaczonych do usunięcia to go usuwam

To by było na tyle jeżeli chodzi o zmianę i usuwanie Rendering w sposób zautomatyzowany.

Jeżeli nie interesuje Cię sitecore to zostawiam odnośnik do serii bardziej na czasie o programowaniu tzw. smart contrat-ów. Pierwszy wpis z serii możesz przeczytać tutaj.

Do następnego!
Łukasz

Dołącz do newslettera i otrzymuj informacje o nowych wpisach jako pierwszy

Podane dane będą przetwarzane w celu informowania o nowych wpisach jak i w celach marketingowych. Możesz wypisać się w dowolnym momencie jeżeli uznasz, że nie chcesz dłużej dostawać ode mnie wiadomości.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *