fbpixel

Sitecore Powershell Extension – zmiana kontentu w wielu item-ach

Dzisiaj zajmiemy się ostatnim tematem z wymagań biznesowych opisanych w pierwszym wpisie z tej serii, czyli edycją kontentu i zamianą wykorzystanych odnośników z obrazkami na odnośniki z nadaną klasą i tekstem.

W ostatnim wpisie pokazałem jak można pracować, zmieniać i usuwać Rendering-i jeżeli przegapiłeś ten wpis to możesz go przeczytać tu.

Zmiany kontentu

Celem poniższych zmian jest usunięcie wszelkich img o danym GUID-zie. Plus nadanie klas wszelkim odnośnikom, które nie mają aktualnie klasy. Zaczynamy

$allItems = Get-ChildItem -Path 'master://sitecore/content/Home/Subpages/' -Language de -Recurse;

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

ForEach($item in $allItems)
{
    Write-Host 'item processing';
    Write-Host $item.FullPath;
    Write-Host $item['Content'];
    
    $changedValue = $item['Content'];

    if($item.TemplateName -eq 'Post'){
        if($changedValue -Match '<p><a href') {
            $changedValue = $changedValue -replace '<p><a href', '<p class="more-link"><a class="more download" href';
        }
        if($changedValue -Match '<a href' -and $changedValue -Match '<strong><a href') {
            $changedValue = ($changedValue -replace '<a href', '<p class="more-link"><a class="more download" href') -replace '</a>', '</a></p>';
        }
        if($changedValue -Match '<a href.*>Download</a>'){
            $changedValue = $changedValue -replace '<a href', '<a class="more download" href';
        }
        $changedValue = $changedValue -replace '<img.*\/6DD05AE153C1418A90AF95B5BAFCC1E3\..*\/>', 'Download';
        $changedValue = $changedValue -replace '<p.*<a.*><\/a><\/p>', '';
        $changedValue = $changedValue -replace '<a.*>\s+<\/a>',''; #remove links with whitespaces and nothing else
        $changedValue = $changedValue -replace '<a class="more" href', '<a class="more-with-arrow" href';
        
    
    Write-Host 'changed value: ';
    Write-Host $changedValue;
    }
    $item.Editing.BeginEdit();
        $item['Content'] = $changedValue;
    $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)
  • iteruję po wcześniej pobranych itemach
  • do zmiennej wpisuję aktualną wartość pola ‘Content’
  • sprawdzam czy template aktualnego $item‘u nosi nazwę “Post”
  • Następnie mamy serię sprawdzeń wystąpień pewnych wyrażeń, które się powtarzały w kontencie w tym kilka regex-ów, jeżeli którykolwiek warunek spełniony to korzystając z powershell’owej funkcji -replace
  • po tych wszystkich operacjach rozpoczynam edycję $itemu
  • przypisuję zmieniony we wcześniejszych krokach kontent w zmiennej $changedValue
  • kończę edycję itemu

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