Архитектура SharePoint такова,что ферма содержит много коллекций сайтов, а
бизнес хочет единую верхнюю навигационную панель на всех коллекциях (или многих).
Для решения такой задачи можно сделать свое решение, в котором создать своего
провайдера. В мастер странице изменить провайдера, настроить провайдера, что бы
он брал данные из требуемой коллекции.
В этой статье я расскажу, как можно копировать TopNavigationBar с одной коллекции в
другу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | cls #Коллекция исходник $webNav = $web .Navigation.TopNavigationBar #Сохраняем файл $xmlFilePath = "C:\temp\QuickLaunchNav.xml" New-Item $xmlFilePath -type file -force #Экспортируем файл Add-Content $xmlFilePath "" Add-Content $xmlFilePath "`n<navigation>" $webUrlXml = "`n<weburl>" + $web .ServerRelativeUrl + "</weburl>" Add-Content $xmlFilePath $WebUrlXml $webTitleXml = "`n<webtitle>" + $web .Title + "</webtitle>" Add-Content $xmlFilePath $webTitleXml Add-Content $xmlFilePath "`n<headings>" $webNav | ForEach-Object { if($_.Properties.NodeType -eq "Heading" ) { Write-Host "Добавляем Heading: " $_.Title -ForegroundColor DarkGray $headingXML = "`n<heading amp=" " itle.replace=" " rl.replace=" " title=" ` " url=" ` ">" Add-Content $xmlFilePath $headingXML $_.Children | ForEach-Object { # $_.Title $navLinkXML = "<navlink amp=" " itle.replace=" " rl.replace=" " title=" ` " url=" ` ">" Add-Content $xmlFilePath $navLinkXML } Add-Content $xmlFilePath "`n</navlink></heading>" } } Add-Content $xmlFilePath "`n</headings>" Add-Content $xmlFilePath "`n</navigation>" $web .Dispose() #=======================================# #Перечень коллекций foreach ( $webUrl in $webUrlArray ){ $newWeb = Get -SPWeb $webUrl $qlNav = $newWeb .Navigation.TopNavigationBar #Читаем файл $xmlFilePath = "C:\temp\QuickLaunchNav.xml" $xmlFile = [xml]( Get-Content ( $xmlFilePath )) $oldWebUrl = $xmlFile .Navigation.WebUrl $currentLinks = @() #Очищаем существующие ссылки $qlNav | ForEach-Object { $currentLinks = $currentLinks + $_.Id } $currentLinks | ForEach-Object { $currentNode = $newWeb .Navigation.GetNodeById($_) write-host "Удаление " $currentNode .Title "и всех вложенных ссылок..." -ForegroundColor Blue $qlNav .Delete( $currentNode ) } #создание первой ссылки $headingNode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode( $xmlFile .Navigation.WebTitle, $xmlFile .Navigation.WebUrl, $true ) $qlNav .AddAsLast( $headingNode ) #Создаем ссылку $xmlFile .Navigation.Headings.Heading | ForEach-Object { $LinkTitle = $_.Title.replace( "?" , "" ) #Write-Host $_.Url $_.NavLink #$headingNode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode($_.Title, $_.Url.Replace($oldWebUrl, $web.ServerRelativeUrl)) $headingNode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode( $LinkTitle , $_.Url, $true ) write-host "Создаем Heading:" $_.Title -ForegroundColor Green $heading = $qlNav .AddAsLast( $headingNode ) $heading .Properties[ "NodeType" ] = "Heading" ; $heading .Update(); $_.NavLink | ForEach-Object { #$linkNode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode($_.Title, $_.Url.Replace($oldWebUrl, $web.ServerRelativeUrl)) write-host "Создаем Navigation Link:" $_.Title -ForegroundColor Yellow $LinkTitle = $_.Title.replace( "?" , "" ) if ( $_.Url -eq $newWeb .ServerRelativeUrl ){ # Проверяем что ссылка на этот же сайт $url = $_.Url+ "/temp" $linkNode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode( $LinkTitle , $url , $true ) $link = $heading .Children.AddAsLast( $linkNode ) $link .Url = $newWeb .ServerRelativeUrl $link .Update() }else{ $linkNode = New-Object Microsoft.SharePoint.Navigation.SPNavigationNode( $LinkTitle , $_.Url, $true ) $link = $heading .Children.AddAsLast( $linkNode ) } } } $newWeb .Dispose() } |
Основным условием является то, что необходимо активировать фичу "Публикация" .
Комментариев нет:
Отправить комментарий