Jun 14 2017 12:40 AM
I manually added some custom verticals in my O365 Search Settings (in the Search Center). That's working fine in the corresponding Navigation Web Part.
But now I have to provision this verticals with PnP (in a xml template). How can I do that?
Jun 14 2017 05:14 AM
Hi @T. de Groot,
Do you mean the Search Navigation options?
So rather than Everything, People, Coversations and Videos you have custom links here?
Jun 14 2017 05:44 AM
That's exactly the situation. But how I can configure this with a PnP xml template is rocket science for me.
Jun 14 2017 06:05 AM
Interesting question. I had a look through the templates even when I included the search configuration with
Get-PnPProvisioningTemplate -Out search.xml -IncludeSearchConfiguration
These options aren't exported. It might be worth it to report this as an issue on the github site.
https://github.com/SharePoint/PnP-Sites-Core
Jun 15 2017 02:02 AM
SearchNavigation is not in the schema at the moment.
In the next hour, i will create a Powershell CSOM script to do it. When it works, i will contribute to Git.
Jun 15 2017 03:12 AM
I Created my solution in Powershell CSOM. Now I have to recreate it for the PnP Scheme. It creates 5 custom verticals.
$node1Title ="Intranet"
$node2Title ="News"
$node3Title ="Documents"
$node4Title ="People"
$node5Title ="Everything"
$node1Url ="/sites/GI/En/search/Pages/results.aspx"
$node2Url ="/sites/GI/En/search/Pages/newsresults.aspx"
$node3Url ="/sites/GI/En/search/Pages/documentsresults.aspx"
$node4Url ="https://xxx.sharepoint.com/search/Paginas/peopleresults.aspx"
$node5Url ="https://xxx.sharepoint.com/search/Paginas/results.aspx"
$addNodes = $true
$Username = "info@xxx.onmicrosoft.com" #Read-Host -Prompt "Please enter your username"
$Password = Read-Host -Prompt "Please enter your password" -AsSecureString
$ctx = new-object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $Password)
$web = $ctx.Web
$ctx.Load($web);
$ctx.ExecuteQuery();
#load navigation nodes
$nav = $web.Navigation
$ctx.Load($nav)
$ctx.ExecuteQuery()
$srchNav = $nav.GetNodeById(1040);
[Microsoft.SharePoint.Client.NavigationNodeCollection] $sNodes = $srchNav.Children
$ctx.Load($srchnav)
$ctx.Load($sNodes)
$ctx.ExecuteQuery()
#delete navigation nodes
for ($nodeID=0;$nodeID -lt $sNodes.Count;$nodeID++)
{
$nNode = $sNodes[$nodeID];
$nNode.DeleteObject()
}
$ctx.ExecuteQuery()
#Create navigation nodes
if ($addNodes) {
$node5 = New-Object Microsoft.SharePoint.Client.NavigationNodeCreationInformation
$node5.Title = $node5Title
$node5.Url = $node5Url
$node5.AsLastNode = $false
$node5.IsExternal = $true
$ctx.Load($sNodes.Add($node5))
write-host "Adding People"
$node4 = New-Object Microsoft.SharePoint.Client.NavigationNodeCreationInformation
$node4.Title = $node4Title
$node4.Url = $node4Url
$node4.AsLastNode = $false
$node4.IsExternal = $true
$ctx.Load($sNodes.Add($node4))
write-host "Adding Documents"
$node3 = New-Object Microsoft.SharePoint.Client.NavigationNodeCreationInformation
$node3.Title = $node3Title
$node3.Url = $node3Url
$node3.AsLastNode = $false
$node3.IsExternal = $true
$ctx.Load($sNodes.Add($node3))
write-host "Adding News"
$node2 = New-Object Microsoft.SharePoint.Client.NavigationNodeCreationInformation
$node2.Title = $node2Title
$node2.Url = $node2Url
$node2.AsLastNode = $false
$node2.IsExternal = $true
$ctx.Load($sNodes.Add($node2))
write-host "Adding Intranet"
$node1 = New-Object Microsoft.SharePoint.Client.NavigationNodeCreationInformation
$node1.Title = $node1Title
$node1.Url = $node1Url
$node1.AsLastNode = $false
$node1.IsExternal = $true
$ctx.Load($sNodes.Add($node1))
}
$ctx.ExecuteQuery()