Архитектура SharePoint такова,что ферма содержит много коллекций сайтов, а
бизнес хочет единую верхнюю навигационную панель на всех коллекциях (или многих).
Для решения такой задачи можно сделать свое решение, в котором создать своего
провайдера. В мастер странице изменить провайдера, настроить провайдера, что бы
он брал данные из требуемой коллекции.
В этой статье я расскажу, как можно копировать TopNavigationBar с одной коллекции в
другу.
cls #Коллекция исходник $web = Get-SPWeb https://portal.ru $webNav = $web.Navigation.TopNavigationBar #Сохраняем файл $xmlFilePath = "C:\temp\QuickLaunchNav.xml" New-Item $xmlFilePath -type file -force #Экспортируем файл Add-Content $xmlFilePath "" Add-Content $xmlFilePath "`n" $webUrlXml = "`n " $web.Dispose() #=======================================# #Перечень коллекций $webUrlArray = 'https://portal.ru/sites/Contracts/', 'https://portal.ru/departments/', 'https://portal.ru/sites/DocLib', 'https://portal.ru/tasks' 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() }" + $web.ServerRelativeUrl + " " Add-Content $xmlFilePath $WebUrlXml $webTitleXml = "`n" + $web.Title + " " Add-Content $xmlFilePath $webTitleXml Add-Content $xmlFilePath "`n" $webNav | ForEach-Object { if($_.Properties.NodeType -eq "Heading") { Write-Host "Добавляем Heading: " $_.Title -ForegroundColor DarkGray $headingXML = "`n " Add-Content $xmlFilePath "`n" Add-Content $xmlFilePath $headingXML $_.Children | ForEach-Object { # $_.Title $navLinkXML = " " } } Add-Content $xmlFilePath "`n" Add-Content $xmlFilePath $navLinkXML } Add-Content $xmlFilePath "`n
Основным условием является то, что необходимо активировать фичу "Публикация" .
Комментариев нет:
Отправить комментарий