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
