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