リンクをトップ リンク バーに追加する
最終更新日: 2010年11月1日
適用対象: SharePoint Foundation 2010
Microsoft SharePoint Foundation Web サイトでは、トップ リンク バーは、Web サイトのタイトルと説明のすぐ下に表示されるタブ化されたストリップです。SharePoint Foundation オブジェクト モデルでは、トップ リンク バーのナビゲーション構造は、SPNavigationNode オブジェクトのコレクションとして表されます。リンクを追加するには、SPNavigationNode オブジェクトをトップ リンク バーのコレクションに追加します。
リンクを追加する方法
Web サイトのトップ リンク バーは、SPNavigationNodeCollection クラスのインスタンスによって表されます。コレクションを取得するには、まず Web サイトの SPWeb.Navigation プロパティにアクセスします。これは、SPNavigation オブジェクトを返します。次に、オブジェクトの TopNavigationBar プロパティにアクセスします。
SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;
Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar
![]() |
---|
Web サイトが親サイトのトップ リンク バーを使用するように構成されている場合、その SPWeb.Navigation.TopNavigationBar プロパティは null を返します。 |
コレクションを取得したら、新しいリンクを表す SPNavigationNode オブジェクトを構築できます。その後、SPNavigationNodeCollection クラスのメソッドを呼び出して、ノードをトップ リンク バーに追加できます。
リンクをトップ リンク バーに追加するには
SPWeb.Navigation.UseShared プロパティの値を確認し、Web サイトに独自のトップ リンク バーがあること、およびその Web サイトが親サイトからリンクを継承していないことを確かめます。
UseShared が false を返す場合、Web サイトには独自のトップ リンク バーがあり、そのトップ リンク バーにリンクを追加できます。プロパティが true を返す場合、Web サイトは親サイトのトップ リンク バーを使用しています。この場合は、親サイトのトップ リンク バーにリンクを追加できます。または、子サイトのサイド リンク バーのメニューにリンクを配置します。
重複するリンクを確認します。
確認する方法の 1 つとして、SPWeb.Navigation.GetNodeByUrl メソッドを呼び出して、提案されたリンクの URL を引数として渡します。その URL を持つリンクが見つからない場合、GetNodeByUrl メソッドは null を返します。
リンクが見つかった場合、メソッドは SPNavigationNode オブジェクトを返します。ただし、既存のリンクは、トップ リンク バーではなくサイド リンク バーに含まれる可能性があります。既存のリンクがトップ リンク バーに含まれるかどうかを確認するには、返されたノードの ParentId プロパティを呼び出します。トップ リンク バーの Id は常に 1002 です。
トップ リンク バーにリンクがない場合は、SPNavigationNode クラスのコンストラクターの 1 つを使用して、そのトップ リンク バーのナビゲーション ノードを作成します。
クラスには 2 つのコンストラクターがあります。
最初のコンストラクターは 2 つの引数を取ります。1 つはリンクの表示テキストが含まれる文字列、もう 1 つはそのリンクが解決する必要がある URL が含まれる文字列です。このコンストラクターは内部リンク (同じサイト コレクションへのリンク) に対してのみ使用します。URL はサーバーの相対 URL にする必要があります。
2 番目のコンストラクターは 3 つの引数を取ります。最初の 2 つの引数はもう一方のコンストラクターと同じです。3 番目の引数は、内部リンクか外部リンクかを示す boolean 値です。外部 Web サイトへのリンクの場合は true を渡し、2 番目の引数で絶対 URL を渡します。内部リンクの場合は false とサーバー相対 URL を渡します。
SPWeb.Navigation.TopNavigationBar プロパティの値を取得して、トップ リンク バーを表す SPNavigationNodeCollection オブジェクトへの参照を取得します。
SPNavigationNodeCollection クラスのメソッドを呼び出して、ノードをコレクションに追加します。
ノードをバーの最初のノードにするには、AddAsFirst メソッドを呼び出します。最後のノードにするには、AddAsLast メソッドを呼び出します。他のノードの後ろに挿入するには、Add メソッドを呼び出します。
注意
SPNavigationNode オブジェクトは、コレクションに追加されるまで完全には初期化されません。オブジェクトがコレクションのメンバーでない場合、Id、ParentId などの読み取り専用のプロパティは null を返します。
例
次の例は、サイト コレクション内の Web サイトのコレクションに対して反復処理を行い、コレクションのルート Web サイトについて、トップ リンク バーの各 Web サイトにリンクを追加するコンソール アプリケーションです。アプリケーションは、リンクを追加する前に、既存のリンクがないかどうかを確認します。
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("https://localhost"))
using (SPWeb web = site.OpenWeb())
{
if (web.Navigation.UseShared)
return;
// Get the top link bar.
SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;
// Iterate over the collection of subsites.
foreach (SPWeb subweb in web.Webs)
{
// Check for an existing link.
SPNavigationNode node = web.Navigation.GetNodeByUrl(subweb.ServerRelativeUrl);
if (node == null || node.ParentId != 1002)
{
// No link, so add one.
// Truncate a long title.
string linkTitle = subweb.Title;
if (linkTitle.Length > 15)
linkTitle = linkTitle.Substring(0, 12) + "...";
// Create the link.
node = new SPNavigationNode(linkTitle, subweb.ServerRelativeUrl);
// Add it to the top link bar.
node = topnav.AddAsLast(node);
}
subweb.Dispose();
}
}
Console.Write("\nPress ENTER to continue....");
Console.ReadLine();
}
}
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation
Module ConsoleApp
Sub Main()
Using site As New SPSite("https://localhost")
Using web As SPWeb = site.OpenWeb()
If web.Navigation.UseShared Then
Return
End If
' Get the top link bar.
Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar
' Iterate over the collection of subsites.
For Each subweb As SPWeb In web.Webs
' Check for an existing link.
Dim node As SPNavigationNode = web.Navigation.GetNodeByUrl(subweb.ServerRelativeUrl)
If node Is Nothing OrElse node.ParentId <> 1002 Then
' No link, so add one.
' Truncate a long title.
Dim linkTitle As String = subweb.Title
If linkTitle.Length > 15 Then
linkTitle = linkTitle.Substring(0, 12) + "..."
End If
' Create the link.
node = New SPNavigationNode(linkTitle, subweb.ServerRelativeUrl)
' Add it to the top link bar.
node = topnav.AddAsLast(node)
End If
subweb.Dispose()
Next
End Using
End Using
Console.Write(vbCrLf & "Press ENTER to continue....")
Console.Read()
End Sub
End Module
関連項目
タスク
[方法] サブサイトをトップ リンク バーまたはサイド リンク バーのメニューに追加する