fbpixel

Sitecore Powershell Extension – zmiana layout w wielu itemach

Dzisiaj omówię rozwiązanie nad którym przyszło mi ostatnio pracować, a była to zmiana właściwości wielu item-ów w sposób zautomatyzowany. W tej części zajmiemy się zmianą layout-u.

Zaczniemy od wprowadzenia jakie wymagania biznesowe zostały postawione do zadania.

  • Wyświetlenie konkretnych stron bez menu, headera, footera, czyli w tzw. iframe
  • usunięcie / zamiana obrazka z kontentu w ok. 400 itemach
  • usunięcie przycisków social media, które mają się wyświetlać w iframe
  • oprócz tego: zmiana kolorów na stronie, ale tego nie będę poruszał, bo nie dotyczy sitecore’a

Instalacja SPE

Ok skoro znamy już wymagania to czas zacząć na początek instalujemy moduł umożliwiający używanie powershell-a z poziomu sitecore’a. Pobrać paczkę można pod tym adresem. Po zainstalowaniu otwieramy Powershell ISE. Możemy to znaleźć pod adresem: /sitecore/shell/client/Applications/Launchpad.aspx w sekcji Content Editing.

Zmiana Layout-u w itemach

Po otwarciu wcześniej wspomnianego Powershell ISE, czyli edytora powershell-a przechodzimy do pisania kodu (omówienie poniżej):

$allItems = Get-ChildItem -Path 'master://sitecore/content/Home/Subpages/' -Language de -Recurse
$oldLayout = Get-Item -Path 'master://sitecore/layout/Layouts/Base/Base Layout'
$newLayout = Get-Item -Path 'master://sitecore/layout/Layouts/Base/Base New Layout'
$device = Get-LayoutDevice -Default

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

ForEach($item in $allItems)
{
    Write-Host 'item processing'
    Write-Host $item.FullPath
    
    $item.Editing.BeginEdit()
    $layouts =  Get-Layout -Item $item -Language en -FinalLayout:$False
    ForEach($layout in $layouts)
    {
        if ($layout -And $layout.ID -match $oldLayout.ID )
        {
            Set-Layout $item -Layout $newLayout -Device $device
            Write-Host 'layout ID: ' $layout.ID
        }
    }
    $item.Editing.EndEdit()
    
    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 Layout $oldLayout
  • pobieram nowy Layout na który chcemy zmienić aktualny $newLayout
  • biorę domyślny device
  • przechodzę po wszystki itemach wyciągniętych w pierwszym kroku
  • zaczynam edycję itemu
  • wyciągam aktualnie użyte Layouty
  • sprawdzam czy ID layoutu zgadza się z tym pobranym w drugim kroku
  • jeżeli warunek spełniony to ustawiam nowy layout
  • kończę edycję itemu

To by było na tyle jeżeli chodzi o zmianę layout-u na itemach 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

[convertkit]