次の方法で共有


リンクをサイド リンク バーに追加する

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
メニュー構造内での移動
組み込みの見出しの下への項目の追加
メニューでの位置の指定
ユーザー設定の見出しの追加

Microsoft SharePoint Foundation Web サイトでは、ほとんどのコンテンツ ページの左側にサイド リンク バーという静的メニューが表示されます。SharePoint Foundation オブジェクト モデルは、サイド リンク バーのメニューを SPNavigationNode オブジェクトの階層として表します。各オブジェクトはメニューのハイパーテキスト リンクを示しています。

新しいリンクをメニューに追加することは、リンクを表すオブジェクトを構築し、そのオブジェクトを階層内の適切な場所に追加するということです。

メニュー構造内での移動

サイド リンク バーのメニューの最上位は見出しです。見出しのコレクションを取得するには、Web サイトの Navigation プロパティによって返されたオブジェクトを取得してから、そのオブジェクトの QuickLaunch プロパティを取得します。QuickLaunch プロパティは、見出しを表す一連の SPNavigationNode を含む SPNavigationNodeCollection オブジェクトを返します。

SPNavigationNodeCollection ql = web.Navigation.QuickLaunch;
Dim ql As SPNavigationNodeCollection = web.Navigation.QuickLaunch

その 1 つ下のレベルは見出しの項目です。見出しを表す各 SPNavigationNode オブジェクトには、見出しの項目を表すノードのコレクションを指定できる Children プロパティがあります。見出しの下に項目がない場合、見出しノードの Children プロパティは空のコレクションを返します。

foreach (SPNavigationNode heading in web.Navigation.QuickLaunch)
{
    foreach (SPNavigationNode item in heading.Children)
    {

        // Do something.
    }
}
For Each heading As SPNavigationNode In web.Navigation.QuickLaunch
    For Each item As SPNavigationNode In heading.Children

        ' Do something.
    Next
Next

見出しとその下の各項目は、ハイパーテキスト リンクを表す SPNavigationNode オブジェクトです。各リンクの表示テキストは、オブジェクトの Title プロパティにカプセル化され、リンクの URL はオブジェクトの Url プロパティです。これらのプロパティの値はリンク ターゲットに依存しません。リンクが Web サイトを指している場合、そのサイトのタイトルまたは URL が変更されても、ナビゲーション ノードのタイトルおよび URL は自動的には変更されません。

既定では、サイド リンク バーのメニューには 2 つのレベルしか表示されません。このサイド リンク バーはカスタマイズして、静的メニューまたはポップアップ メニューに追加のレベルを表示することができます。詳細については、「[方法] サイド リンク バーの表示をカスタマイズする」を参照してください。

組み込みの見出しの下への項目の追加

[リスト]、[ライブラリ] など、標準のサイド リンク バーの見出しの下にリンクを挿入するには、AddToQuickLaunch メソッドを呼び出します。このメソッドは 2 つの引数を取ります。1 つは、新しいリンクを表す SPNavigationNode オブジェクト、もう 1 つは、リンクを受け取る見出しを指定する SPQuickLaunchHeading 列挙値です。

AddToQuickLaunch メソッドは、SPNavigation クラスに含まれます。このクラスのインスタンスは SPWeb クラスの Navigation プロパティによって返されます。

組み込みの見出しの下に項目を追加するには

  1. (オプション) Web サイトの Navigation プロパティによって返されたオブジェクトの GetNodeByUrl メソッドを呼び出して、同じターゲットへの既存のリンクを確認します。

    Web サイトのナビゲーション構造に URL を指定するリンクが含まれない場合、GetNodeByUrl メソッドは null を返します。

  2. SPNavigationNode クラスのコンストラクターの 1 つを呼び出して、リンクを表すノードを作成します。

    クラスには 2 つのコンストラクターがあります。

    • 最初のコンストラクターは 2 つの引数を取ります。1 つはリンクの表示テキストが含まれる文字列、もう 1 つはそのリンクが解決する必要がある URL が含まれる文字列です。このコンストラクターは内部リンク (同じサイト コレクションへのリンク) に対してのみ使用します。URL はサーバーの相対 URL にする必要があります。

    • 2 番目のコンストラクターは 3 つの引数を取ります。最初の 2 つの引数はもう一方のコンストラクターと同じです。3 番目の引数は、内部リンクか外部リンクかを示す boolean 値です。外部 Web サイトへのリンクの場合は true を渡し、2 番目の引数で絶対 URL を渡します。内部リンクの場合は false とサーバー相対 URL を渡します。

    注意

    SPNavigationNode オブジェクトは、コレクションに追加されるまで完全には初期化されません。オブジェクトがコレクションのメンバーでない場合、Id プロパティ、ParentId プロパティなどの読み取り専用のプロパティは null を返します。

  3. AddToQuickLaunch メソッドを呼び出して、最初の引数として新しいノードを、2 番目の引数として SPQuickLaunchHeading 列挙値を渡します。

    AddToQuickLaunch メソッドは、SPNavigationNode クラスの初期化されたインスタンスを返します。このオブジェクトを使用すると、ノードの他のプロパティを取得および設定できます。オブジェクトのプロパティを変更したら Update メソッドを呼び出す必要があります。

注意

サイド リンク バーのメニューに既存のリストまたはドキュメント ライブラリを最も簡単に追加するには、リストまたはライブラリを表す SPList オブジェクトを取得し、OnQuickLaunch プロパティを true に設定します。これにより、リストまたはライブラリの項目が、適切な見出しの下に自動的に追加されます。サイド リンク バーの見出しについては、SPQuickLaunchHeading 列挙を参照してください。サイド リンク バーのメニューに表示されていない見出しは新しく追加されます。

次のコンソール アプリケーションでは、サイド リンク バーの [リスト] 見出しに項目が追加されます。

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())
                {
                    // Get the Links list or create it if it does not exist.
                    SPList list = web.Lists.TryGetList("Links");

                    if (list == null || list.BaseTemplate != SPListTemplateType.Links)
                    {
                        // Create the list.
                        Guid listId = web.Lists.Add("Links", "Interesting hyperlinks", SPListTemplateType.Links);
                        list = web.Lists.GetList(listId, false);
                    }

                    // Check for an existing link to the list.
                    SPNavigationNode listNode = web.Navigation.GetNodeByUrl(list.DefaultViewUrl);
 
                    // No link, so create one.
                    if (listNode == null)
                    {
                        // Create the node.
                        listNode = new SPNavigationNode(list.Title, list.DefaultViewUrl);

                        // Add it to Quick Launch.
                        listNode = web.Navigation.AddToQuickLaunch(listNode, SPQuickLaunchHeading.Lists);
                    }
                }
            }
            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()

                ' Get the Links list or create it if it does not exist.
                Dim list As SPList = web.Lists.TryGetList("Links")

                If list Is Nothing OrElse list.BaseTemplate <> SPListTemplateType.Links Then

                    ' Create the list.
                    Dim listId As Guid = web.Lists.Add("Links", "Interesting hyperlinks", SPListTemplateType.Links)
                    list = web.Lists.GetList(listId, False)
                End If

                ' Check for an existing link to the list.
                Dim listNode As SPNavigationNode = web.Navigation.GetNodeByUrl(list.DefaultViewUrl)

                ' No link, so create one.
                If listNode Is Nothing Then

                    ' Create the node.
                    listNode = New SPNavigationNode(list.Title, list.DefaultViewUrl)

                    ' Add it to Quick Launch.
                    listNode = web.Navigation.AddToQuickLaunch(listNode, SPQuickLaunchHeading.Lists)
                End If

            End Using

        End Using

        Console.Write(vbCrLf & "Press ENTER to continue....")
        Console.Read()
    End Sub

End Module

メニューでの位置の指定

前のセクションで説明した AddToQuickLaunch メソッドにより、新しいリンクが、サイド リンク バーのメニューの指定された見出しの下に最新の項目として追加されます。配置する場所をより細かく制御するには、SPNavigationNodeCollection クラスのメソッドの 1 つを使用します。次の表は、このメソッドについて簡単にまとめたものです。

メソッド

説明

Add

コレクション内の指定されたノードの後に新しいノードを追加します。

AddAsFirst

コレクション内の最初のノードとして新しいノードを追加します。

AddAsLast

コレクション内の最後のノードとして新しいノードを追加します。

次の手順では、Add メソッドを使用して、サイド リンク バーのメニューの指定された項目の直後にリンクを挿入する方法について説明します。

メニューの既存の項目の後にリンクを挿入するには

  1. SPNavigation クラスの GetNodeById メソッドを呼び出して、リンクを配置する見出しのノードを取得します。

    // Get the Libraries heading.
    SPNavigationNode heading = web.Navigation.GetNodeById((int)SPQuickLaunchHeading.Documents);
    
    ' Get the Libraries heading.
    Dim heading As SPNavigationNode = web.Navigation.GetNodeById(CInt(SPQuickLaunchHeading.Documents))
    
  2. 見出しノードの Children プロパティによって返されたコレクションに対してクエリを実行し、リンクを配置する場所の前の項目のノードを取得します。

    // If a node for Shared Documents exists, the new node will go after it.
    SPList sharedDocs = web.Lists.TryGetList("Shared Documents");
    SPNavigationNode sharedDocsNode = null;
    if (sharedDocs != null)
        sharedDocsNode = librariesHeading
            .Children
            .Cast<SPNavigationNode>()
            .FirstOrDefault(n => n.Url == sharedDocs.DefaultViewUrl);
    
    ' If a node for Shared Documents exists, the new node will go after it.
    Dim sharedDocs As SPList = web.Lists.TryGetList("Shared Documents")
    Dim sharedDocsNode As SPNavigationNode = Nothing
    If sharedDocs IsNot Nothing Then
        sharedDocsNode = librariesHeading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
            Function(n) n.Url = sharedDocs.DefaultViewUrl)
    End If
    
  3. 新しいリンクを表す SPNavigationNode オブジェクトを作成します。

    SPNavigationNode newNode = new SPNavigationNode(list.Title, list.DefaultViewUrl);
    
    Dim newNode As SPNavigationNode = New SPNavigationNode(list.Title, list.DefaultViewUrl)
    
  4. Add メソッドを呼び出してリンクを追加します。その際、最初の引数として新しいノードを、2 番目の引数として新しいノードを追加する場所の前のノードを渡します。

    newNode = heading.Children.Add(newNode, sharedDocsNode);
    
    newNode = heading.Children.Add(newNode, sharedDocsNode)
    

注意

SPNavigationNode オブジェクトは、コレクションに追加されるまで完全には初期化されません。オブジェクトがコレクションのメンバーでない場合、Id プロパティ、ParentId プロパティなどの読み取り専用のプロパティは null を返します。

次の例は、サイド リンク バーのメニューの特定の位置にリンクを追加する方法を示しています。この例は、Web を範囲とする機能を使用して Meeting Notes という名前のドキュメントを作成する大きなプロジェクトの一部です。機能には、SPFeatureReceiver クラスを実装するイベント ハンドラーが含まれます。フィーチャー レシーバーの FeatureActivated メソッドには、[ライブラリ] 見出しの下に Meeting Notes ライブラリを作成し、そのライブラリにリンクを追加するコードがあります。メニューに Shared Documents ライブラリへのリンクが含まれる場合、新しいリンクはそのライブラリの直後に挿入されます。メニューに Shared Documents へのリンクが含まれない場合は、Meeting Notes へのリンクが [ライブラリ] 見出しの最初の項目になります。

注意

次のコード例では、修飾を持たない複数の型を使用しています。コードが正しくコンパイルされるようにするには、フィーチャー レシーバー クラスで次の名前空間をインポートする必要があります。

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    // Get the website where the feature is activated.
    SPWeb web = properties.Feature.Parent as SPWeb;
    if (web == null)
        return;

    // Get the Meeting Notes document library.
    SPList meetingNotes = web.Lists.TryGetList("Meeting Notes");
    if (meetingNotes == null)
    {
        // Create the library if it does not exist.
        Guid listId = web.Lists.Add("Meeting Notes", "An archive for meeting notes.", SPListTemplateType.DocumentLibrary);
        meetingNotes = web.Lists.GetList(listId, false);
    }

    // Check for an existing Quick Launch node for Meeting Notes.
    SPNavigationNode meetingNotesNode = web.Navigation.GetNodeByUrl(meetingNotes.DefaultViewUrl);

    // If a Meeting Notes node exists on Quick Launch, nothing more to do.
    if (meetingNotesNode != null)
        return;

    // Still here, so create a node for Meeting Notes.
    meetingNotesNode = new SPNavigationNode(meetingNotes.Title, meetingNotes.DefaultViewUrl);

    // Get the Libraries heading.
    SPNavigationNode librariesHeading = web.Navigation.GetNodeById((int)SPQuickLaunchHeading.Documents);

    // If the Libraries heading does not exist or it exists but has no items below it,
    // then Meeting Notes will be the first item.
    if (librariesHeading == null || librariesHeading.Children.Count == 0)
    {
        web.Navigation.AddToQuickLaunch(meetingNotesNode, SPQuickLaunchHeading.Documents);
        return;
    }

    // The Libraries heading exists. Now check for an item linking to Shared Documents.
    // If a node for Shared Documents exists, Meeting Notes will go after it.
    SPList sharedDocs = web.Lists.TryGetList("Shared Documents");
    SPNavigationNode sharedDocsNode = null;
    if (sharedDocs != null)
        sharedDocsNode = librariesHeading
            .Children
            .Cast<SPNavigationNode>()
            .FirstOrDefault(n => n.Url == sharedDocs.DefaultViewUrl);

    // A node for Shared Documents does not exist. Make Meeting Notes the first item.
    if (sharedDocsNode == null)
    {
        librariesHeading.Children.AddAsFirst(meetingNotesNode);
        return;
    }

    // A node for Shared Documents exists. Place Meeting Notes after it.
    librariesHeading.Children.Add(meetingNotesNode, sharedDocsNode);

    web.Dispose();
}
Public Overrides Sub FeatureActivated(ByVal properties As SPFeatureReceiverProperties)

    'Get the website where the feature is activated.
    Dim web As SPWeb = TryCast(properties.Feature.Parent, SPWeb)
    If web Is Nothing Then
        Return
    End If

    ' Get the Meeting Notes document library.
    Dim meetingNotes As SPList = web.Lists.TryGetList("Meeting Notes")
    If meetingNotes Is Nothing Then

        ' Create the library if it does not exist.
        Dim listId As Guid = web.Lists.Add("Meeting Notes", "An archive for meeting notes.", SPListTemplateType.DocumentLibrary)
        meetingNotes = web.Lists.GetList(listId, False)

    End If

    ' Check for an existing Quick Launch node for Meeting Notes.
    Dim meetingNotesNode As SPNavigationNode = web.Navigation.GetNodeByUrl(meetingNotes.DefaultViewUrl)

    ' If a Meeting Notes node exists on Quick Launch, nothing more to do.
    If meetingNotesNode IsNot Nothing Then
        Return
    End If

    ' Still here, so create a node for Meeting Notes.
    meetingNotesNode = New SPNavigationNode(meetingNotes.Title, meetingNotes.DefaultViewUrl)

    ' Get the Libraries heading.
    Dim librariesHeading As SPNavigationNode = web.Navigation.GetNodeById(CInt(SPQuickLaunchHeading.Documents))

    ' If the Libraries heading does not exist or it exists but has no items below it,
    ' then Meeting Notes will be the first item.
    If librariesHeading Is Nothing OrElse librariesHeading.Children.Count = 0 Then
        web.Navigation.AddToQuickLaunch(meetingNotesNode, SPQuickLaunchHeading.Documents)
        Return
    End If

    ' The Libraries heading exists. Now check for an item linking to Shared Documents.
    ' If a node for Shared Documents exists, Meeting Notes will go after it.
    Dim sharedDocs As SPList = web.Lists.TryGetList("Shared Documents")
    Dim sharedDocsNode As SPNavigationNode = Nothing
    If sharedDocs IsNot Nothing Then
        sharedDocsNode = librariesHeading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
            Function(n) n.Url = sharedDocs.DefaultViewUrl)
    End If

    ' A node for Shared Documents does not exist. Make Meeting Notes the first item.
    If sharedDocsNode Is Nothing Then
        librariesHeading.Children.AddAsFirst(meetingNotesNode)
        Return
    End If

    ' A node for Shared Documents exists. Place Meeting Notes after it.
    librariesHeading.Children.Add(meetingNotesNode, sharedDocsNode)

    web.Dispose()
End Sub

ユーザー設定の見出しの追加

サイド リンク バーのメニュー上の見出しは SPNavigationNode オブジェクトです。すべての見出しのコレクションが、Web サイトの Navigation オブジェクトの QuickLaunch プロパティによって返されます。ユーザー設定の見出しを追加するには、新しいナビゲーション ノードを作成し、SPNavigationNodeCollection クラスのメソッド (AddAsLast など) を呼び出して、そのノードをコレクションに追加します。

ユーザー設定の見出しをサイド リンク バーに追加するには

  1. 新しい見出しのナビゲーション ノードを表す SPNavigationNode オブジェクトを作成します。

    string headingTitle = "Resources";
    string headingUrl = web.Navigation.Home.Url;
    SPNavigationNode heading = new SPNavigationNode(headingTitle, headingUrl);
    
    Dim headingTitle As String = "Resources"
    Dim headingUrl As String = web.Navigation.Home.Url
    Dim heading As SPNavigationNode = New SPNavigationNode(headingTitle, headingUrl)
    
  2. ナビゲーション ノードのコレクションを取得します。このコレクションは、Web サイトの SPWeb.Navigation プロパティによって返されたオブジェクトの QuickLaunch プロパティによって返されます。

    SPNavigationNodeCollection quickLaunch = web.Navigation.QuickLaunch;
    
    Dim quickLaunch As SPNavigationNodeCollection = web.Navigation.QuickLaunch
    
  3. SPNavigationNodeCollection クラスのメソッドを呼び出して、新しい見出しノードをコレクションに追加します。

    heading = quickLaunch.AddAsLast(heading);
    
    heading = quickLaunch.AddAsLast(heading)
    

    この例では、AddAsLast メソッドを呼び出します。その他に AddAsFirstAdd の 2 つのメソッドを使用できます。

  4. (オプション) 新しい見出しの Children プロパティによって返されたコレクションを取得し、もう一度 SPNavigationNodeCollection クラスのメソッドを呼び出して、新しい見出しの下に項目を追加します。

    SPNavigationNode item = new SPNavigationNode(itemTitle, itemUrl);
    item = heading.Children.AddAsLast(item);
    
    Dim item As SPNavigationNode = New SPNavigationNode(itemTitle, itemUrl)
    item = heading.Children.AddAsLast(item)
    

次の例は、新しいサイド リンク バーのメニューに [リソース] の見出しを作成し、その新しい見出しに項目を追加するコンソール アプリケーションです。

using System;
using System.Linq;
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())
                {
                    string headingTitle = "Resources";
                    string headingUrl = web.Navigation.Home.Url;
                    string itemTitle = "SharePoint Developer Center";
                    string itemUrl = "https://msdn.microsoft.com/sharepoint";

                    // Get the Quick Launch headings.
                    SPNavigationNodeCollection ql = web.Navigation.QuickLaunch;

                    // If a Resources heading exists, get it.
                    SPNavigationNode heading = ql
                        .Cast<SPNavigationNode>()
                        .FirstOrDefault(n => n.Title == headingTitle);

                    // If the Resources heading does not exist, create it.
                    if (heading == null)
                    {
                        heading = new SPNavigationNode(headingTitle, headingUrl);
                        heading = ql.AddAsLast(heading);
                    }

                    // If the heading has a SharePoint Dev Center item, get it.
                    SPNavigationNode item = heading
                        .Children
                        .Cast<SPNavigationNode>()
                        .FirstOrDefault(n => n.Url == itemUrl);

                    // If the item does not exist, create it.
                    if (item == null)
                    {
                        item = new SPNavigationNode(itemTitle, itemUrl, true);
                        item = heading.Children.AddAsLast(item);
                    }
                 }
            }
            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()

                Dim headingTitle As String = "Resources"
                Dim headingUrl As String = web.Navigation.Home.Url
                Dim itemTitle As String = "SharePoint Developer Center"
                Dim itemUrl As String = "https://msdn.microsoft.com/sharepoint"

                ' Get the Quick Launch headings.
                Dim ql As SPNavigationNodeCollection = web.Navigation.QuickLaunch

                ' If a Resources heading exists, get it.
                Dim heading As SPNavigationNode = ql.Cast(Of SPNavigationNode)().FirstOrDefault( _
                    Function(n) n.Title = headingTitle)

                ' If the Resources heading does not exist, create it.
                If heading Is Nothing Then
                    heading = New SPNavigationNode(headingTitle, headingUrl)
                    heading = ql.AddAsLast(heading)
                End If

                ' If the heading has a SharePoint Dev Center item, get it.
                Dim item As SPNavigationNode = heading.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
                    Function(n) n.Url = itemUrl)

                ' If the item does not exist, create it.
                If item Is Nothing Then
                    item = New SPNavigationNode(itemTitle, itemUrl, True)
                    item = heading.Children.AddAsLast(item)
                End If

            End Using
        End Using

        Console.Write(vbCrLf & "Press ENTER to continue....")
        Console.Read()
    End Sub

End Module

関連項目

タスク

[方法] サイド リンク バーを表示または非表示にする

[方法] サイド リンク バーの表示をカスタマイズする

[方法] サブサイトをトップ リンク バーまたはサイド リンク バーのメニューに追加する