Sitecore Powershell Extensions – zmiana template w itemach

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 komendySet-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

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 *