次の方法で共有


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

最終更新日: 2010年11月1日

適用対象: SharePoint Foundation 2010

Microsoft SharePoint Foundation 2010 のほとんどのコンテンツ ページに表示されるトップ リンク バーは、Web サイトのタイトルと説明のすぐ下に表示される水平方向のタブ化されたストリップです。最初のタブが "ホーム" 位置で、通常は Web サイトのホーム ページへのリンクが含まれています。バー上の他のリンクは、ほとんどの場合、サイト階層で下位レベルにある Web サイトを参照しています。

トップ リンク バーは、AspMenu コントロールによってレンダリングされます。このコントロールは、Web サイトのページのレイアウトを作成するマスター ページで定義されます。SharePoint Foundation 2010 では、コンテンツ ページとアプリケーション ページの両方の主マスター ページは v4.master です。トップ リンク バーの外観を変更するには、v4.master でマークアップを変更します。

トップ リンク バーをカスタマイズする

トップ リンク バーの外観を変更するには、バーのナビゲーション ノードをレンダリングする AspMenu コントロールのプロパティを設定します。コントロールおよびそのデータ ソースのマークアップの詳細については、「ナビゲーション コントロール」を参照してください。

たとえば、ポップアップ メニューを追加するプロパティを設定し、バーのリンクの下に下位アイテムを表示できます。この変更は、乱雑なトップ リンク バーを整理するのに役立ちます。これにより、静的メニューのリンクをカテゴリとして使用し、セカンダリ リンクをカテゴリの下のポップアップ メニューに移動できるからです。

ポップアップ メニューをトップ リンク バーに追加するには

  1. SharePoint Designer 2010 で、カスタマイズする Web サイトを開きます。

  2. ナビゲーション ウィンドウで [マスター ページ] を選択します。

  3. [v4.master] を右クリックし、[コピー] をクリックします。

  4. [マスター ページ] ウィンドウの何もない領域を右クリックし、[貼り付け] をクリックします。

    v4_copy(1).master ファイルが作成されます。

  5. [v4_copy(1).master] を右クリックして [名前の変更] をクリックし、新しい名前を入力します。たとえば、「my.master」と入力します。

  6. 新しいファイルを編集用に開きます。

  7. トップ リンク バーのメニューのコントロールを探します。コード ビューでコントロールを見つけるには、次の文字列を検索します。

    ID="TopNavigationMenuV4"

  8. 次のように、StaticDisplayLevels 属性および MaximumDynamicDisplayLevels 属性の値を 1 に設定します。

    <SharePoint:AspMenu
      ID="TopNavigationMenuV4"
      Runat="server"
      EnableViewState="false"
      DataSourceID="topSiteMap"
      AccessKey="<%$Resources:wss,navigation_accesskey%>"
      UseSimpleRendering="true"
      UseSeparateCss="false"
      Orientation="Horizontal"
      StaticDisplayLevels="1"MaximumDynamicDisplayLevels="1"
      SkipLinkText=""
      CssClass="s4-tn"/> 
    
  9. [ファイル] メニューで [保存] をクリックします。

    注意

    サイトマップされたページがブラウザーで開いている場合、サイトの既定のマスター ページに対する変更を保存できない場合があります。この場合は、ブラウザーを閉じて、もう一度やり直してください。

  10. ナビゲーション ウィンドウで [マスター ページ] を選択します。

  11. マスター ページの名前を右クリックし、[既定のマスター ページとして設定] をクリックします。

    注意

    SPWeb.MasterUrl プロパティの値を設定するコードを記述して、カスタム マスター ページを既定のマスターとして設定することもできます。

ポップアップ メニューは、トップ リンク バーのノードの 1 つに子ノードが指定されるまでは表示されません。次のコンソール アプリケーションでは、新しいノードを作成して表示テキストとして "Resource" を指定し、そのノードに子ノードを 1 つ追加して、表示テキストとして "SharePoint Developer Center" を指定します。

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("parent"))
                {
                    if (!web.Navigation.UseShared)
                    {
                        string resTitle = "Resources";
                        string resUrl = web.Navigation.Home.Url;
                        string spdevTitle = "SharePoint Developer Center";
                        string spdevUrl = "https://msdn.microsoft.com/sharepoint";

                        // Get the top link bar.
                        SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;

                        // If a Resources link exists, get it.
                        SPNavigationNode resLink = topnav
                            .Cast<SPNavigationNode>()
                            .FirstOrDefault(n => n.Title == resTitle);

                        // If the Resources link does not exist, create it.
                        if (resLink == null)
                        {
                            resLink = new SPNavigationNode(resTitle, resUrl);
                            resLink = topnav.AddAsLast(resLink);
                        }

                        // If the Resources node has a SharePoint Dev Center child, get it.
                        SPNavigationNode spdevLink = resLink
                            .Children
                            .Cast<SPNavigationNode>()
                            .FirstOrDefault(n => n.Url == spdevUrl);

                        // If the item does not exist, create it.
                        if (spdevLink == null)
                        {
                            spdevLink = new SPNavigationNode(spdevTitle, spdevUrl, true);
                            spdevLink = resLink.Children.AddAsLast(spdevLink);
                        }
                    }
                }
            }
            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 Not web.Navigation.UseShared Then

                    Dim resTitle As String = "Resources"
                    Dim resUrl As String = web.Navigation.Home.Url
                    Dim spdevTitle As String = "SharePoint Developer Center"
                    Dim spdevUrl As String = "https://msdn.microsoft.com/sharepoint"

                    ' Get the top link bar.
                    Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar

                    ' If a Resources link exists, get it.
                    Dim resLink As SPNavigationNode = topnav.Cast(Of SPNavigationNode)().FirstOrDefault( _
                        Function(n) n.Title = resTitle)

                    ' If the Resources link does not exist, create it.
                    If resLink Is Nothing Then
                        resLink = New SPNavigationNode(resTitle, resUrl)
                        resLink = topnav.AddAsLast(resLink)
                    End If

                    ' If the Resources node has a SharePoint Dev Center child, get it.
                    Dim spdevLink As SPNavigationNode = resLink.Children.Cast(Of SPNavigationNode)().FirstOrDefault( _
                        Function(n) n.Url = spdevUrl)

                    ' If the item does not exist, create it.
                    If spdevLink Is Nothing Then
                        spdevLink = New SPNavigationNode(spdevTitle, spdevUrl, True)
                        spdevLink = resLink.Children.AddAsLast(spdevLink)
                    End If
                End If

            End Using
        End Using

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

End Module

トップ リンク バーの継承

サブサイトのトップ リンク バーは、親サイトのトップ リンク バーのナビゲーション リンクを継承できます。この場合、独自のリンク セットを定義する必要はありません。この方法で構成されたトップ リンク バーは、親サイトとサブサイト間を移動するユーザーに対して一貫性のある操作を提供できます。詳細については、「[方法] サイト間でトップ リンク バーを共有する」を参照してください。

ただし、[親のリンクを使用] を選択して、サブサイトのトップ リンクが親のリンクを使用するように構成することは、そのサブサイトが親のトップ リンク バーの背後にあるサイト マップを使用するのを意味するにすぎません。トップ リンク バーのコンテンツは継承され、その表現は、引き続きサブサイト独自の既定のマスター ページと独自のコンテンツ ページのマークアップによって決定されます。これは明白であるように思われますが、見落とされがちです。

すべてのサブサイトにわたって一貫性のある表現を実現する 1 つの方法は、親サイトのマスター ページが参照されるようにサブサイトの MasterUrl プロパティを設定することです。ただし、これにより他のローカル カスタマイズが元に戻されることがあり、この理由から、このアプローチが望ましくない場合もあります。トップ リンク バーのマークアップの変更は、各 Web サイトの既定のマスター ページに対して同じ変更を行って複製しておくことをお勧めします。

関連項目

タスク

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

概念

ナビゲーション コントロール

[方法] サイト間でトップ リンク バーを共有する

リンクをトップ リンク バーに追加する