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
