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