W dzisiejszym wpisie zajmę się zmianą template w itemach przy pomocy powershella.
Poprzednio omówiłem już kilka różnych metod ułatwiających pracę z itemami z użyciem powershell-owych skryptów. Jeżeli je przegapiłeś to zostawiam odnośniki poniżej:
Zacznę może od tego dlaczego musiałem to zrobić czyli od wymagań. Po wdrożeniu poprzednich zmian na produkcję wszystko wydawało się „hulać” jednak dostałem informację, że część itemów musi przekierowywać na nowe adresy. O tym nie było mowy nigdy wcześniej no ale cóż trzeba zrobić więc poprosiłem o listę url stron, a co za tym idzie itemów w sitecore, które musiały zostać dostosowane do nowego wymagania. Mechanizm był już zaimplementowany wcześniej więc wystarczyło zmienić tym item-om wspomniany template.
$templateToChange = Get-Item -Path 'master://sitecore/templates/Base/Redirect' -Language de Write-Host 'template ID: ' $templateToChange.ID $pathItemsToChangeArray = 'master://sitecore/content/Home/Subpages/page1','master://sitecore/content/Home/Subpages/page1/subpage1','master://sitecore/content/Home/Subpages/page2' #etc. Foreach($itemPath in $pathItemsToChangeArray){ $item = Get-Item -Path $itemPath Write-Host 'current item ID: ' $item.ID ', path: ' $item.FullPath $currentTemplate = Get-ItemTemplate -Item $item if($currentTemplate.ID -eq $templateToChange.ID){ Write-Host 'nothing to change' continue; } Set-ItemTemplate -Item $item -TemplateItem $templateToChange Write-Host 'template changed from: ' $currentTemplate.ID ' to: ' $templateToChange.ID } Write-Host 'end'
- Pobieram template, na który mam zmienić aktualnie użyty (jaki by nie był)
- Następnie dostałem listę w excel ok. 70 itemów do zmiany (na potrzeby tego wpisy zamieściłem tylko 3 różne ścieżki)
- Przechodzę po wszystkich ścieżkach z tablicy
- Wyciągam item po ścieżce
- Wydobywam aktualnie użyty template dla aktualnie przetwarzanego itemu
- Szybkie sprawdzenie czy aby napewno aktualnie użyty item nie jest tym samym, na który będę zmieniał (dzięki temu można puszczać skrypt wielokrotnie bez obawy o wydajność). Jeśli warunek spełniony to przechodzę do przetwarzania kolejnej ścieżki.
- Jeżeli template trzeba zmienić to go zmieniam korzystając z komendy
Set-ItemTemplate
z dwiema flagami-Item
, która przyjmuje item dla którego template ma zostać zmieniony i-TemplateItem
przyjmującą instancje template na którą ma być zmieniony aktualnie użyty
To by było na tyle jeśli chodzi o dzisiejszy wpis 😉 Jeżeli potrzebowalibyście zrobić coś innego niż to co opisałem we wpisach to pełną dokumentację do Sitecore Powershell Extensions możecie przeczytać tutaj.
Do następnego!
Łukasz