Partilhar via


PublishingWeb.SetAvailablePageLayouts Method

Specifies PageLayout objects that are available for use in creating PublishingPage objects within this PublishingWeb object.

Namespace:  Microsoft.SharePoint.Publishing
Assembly:  Microsoft.SharePoint.Publishing (in Microsoft.SharePoint.Publishing.dll)

Syntax

'Declaration
Public Sub SetAvailablePageLayouts ( _
    pageLayouts As PageLayout(), _
    resetAllSubsitesToInherit As Boolean _
)
'Usage
Dim instance As PublishingWeb
Dim pageLayouts As PageLayout()
Dim resetAllSubsitesToInherit As Boolean

instance.SetAvailablePageLayouts(pageLayouts, _
    resetAllSubsitesToInherit)
public void SetAvailablePageLayouts(
    PageLayout[] pageLayouts,
    bool resetAllSubsitesToInherit
)

Parameters

  • resetAllSubsitesToInherit
    Type: System.Boolean

    This Boolean parameter indicates whether the available PageLayout objects should be pushed down to all subsites.

Remarks

After calling this method, the GetAvailablePageLayouts method returns this set PageLayout objects. The **IsInheritingAvailablePageLayouts()**and IsAllowingAllPageLayouts() properties are False.

To save changes after calling this method, call the Update method.

Note

This operation is synchronous.

Examples

This example restricts the set of available page layouts used for creating pages in a publishing Web so that only page layouts associated with a specified content type are available.

Before using this example, verify that the associatedContentTypeId parameter is from a content type on the root Web site of the site.

using SPContentTypeId = Microsoft.SharePoint.SPContentTypeId;
using SPContentType = Microsoft.SharePoint.SPContentType;
using SPSite = Microsoft.SharePoint.SPSite;
using SPFile = Microsoft.SharePoint.SPFile;
using SPWeb = Microsoft.SharePoint.SPWeb;
using PublishingSite = Microsoft.SharePoint.Publishing.PublishingSite;
using PublishingWeb = Microsoft.SharePoint.Publishing.PublishingWeb;
using PageLayoutCollection = Microsoft.SharePoint.Publishing.PageLayoutCollection;
using PageLayout = Microsoft.SharePoint.Publishing.PageLayout;

namespace Microsoft.SDK.SharePointServer.Samples
{
    public static class PublishingWebCodeSamples
    {
  
        public static void RestrictPageLayoutsByContentType(
PublishingWeb publishingWeb, 
SPContentTypeId associatedContentTypeId)
        {
// Replace these variable values and input parameters with your own values.
bool excludeHiddenLayouts = true;
bool resetAllSubsitesToInherit = true;

// Validate the input parameters.
if (null == publishingWeb)
{
    throw new System.ArgumentNullException("publishingWeb");
}

SPSite site = publishingWeb.Web.Site;
PublishingSite publishingSite = new PublishingSite(site);

// Retrieve a collection of all page layouts in the site collection
// that match the content type.
SPContentType associatedContentType = publishingSite.ContentTypes[associatedContentTypeId];
if (null == associatedContentType)
{
    throw new System.ArgumentException(
        "The SPContentTypeId did not match an SPContentType in the SPSite.RootWeb",
        "associatedContentTypeId");
}

PageLayoutCollection pageLayoutsByContentType = 
    publishingSite.GetPageLayouts(associatedContentType, excludeHiddenLayouts);

// Update the Web to use these page layouts when creating pages.
publishingWeb.SetAvailablePageLayouts(
    pageLayoutsByContentType.ToArray(),
    resetAllSubsitesToInherit);

publishingWeb.Update();

//  Verify the expected results. Note: This is not required. It demonstrates
//  the results of calling the SetAvailablePageLayouts method.
//
System.Diagnostics.Debug.Assert(!publishingWeb.IsAllowingAllPageLayouts);
System.Diagnostics.Debug.Assert(!publishingWeb.IsInheritingAvailablePageLayouts);

PageLayout[] availablePageLayouts = publishingWeb.GetAvailablePageLayouts();
foreach (PageLayout pageLayout in availablePageLayouts)
{
    System.Diagnostics.Debug.Assert(
        pageLayout.AssociatedContentType.Id == associatedContentTypeId);
}
        }
    }
}
Imports SPContentTypeId = Microsoft.SharePoint.SPContentTypeId
Imports SPContentType = Microsoft.SharePoint.SPContentType
Imports SPSite = Microsoft.SharePoint.SPSite
Imports SPFile = Microsoft.SharePoint.SPFile
Imports SPWeb = Microsoft.SharePoint.SPWeb
Imports PublishingSite = Microsoft.SharePoint.Publishing.PublishingSite
Imports PublishingWeb = Microsoft.SharePoint.Publishing.PublishingWeb
Imports PageLayoutCollection = Microsoft.SharePoint.Publishing.PageLayoutCollection
Imports PageLayout = Microsoft.SharePoint.Publishing.PageLayout

Namespace Microsoft.SDK.SharePointServer.Samples
    Public NotInheritable Class PublishingWebCodeSamples

        Private Sub New()
        End Sub
        Public Shared Sub RestrictPageLayoutsByContentType(ByVal publishingWeb As PublishingWeb, ByVal associatedContentTypeId As SPContentTypeId)
' Replace these variable values and input parameters with your own values.
Dim excludeHiddenLayouts As Boolean = True
Dim resetAllSubsitesToInherit As Boolean = True

' Validate the input parameters.
If Nothing Is publishingWeb Then
    Throw New System.ArgumentNullException("publishingWeb")
End If

Dim site As SPSite = publishingWeb.Web.Site
Dim publishingSite As New PublishingSite(site)

' Retrieve a collection of all page layouts in the site collection
' that match the content type.
Dim associatedContentType As SPContentType = publishingSite.ContentTypes(associatedContentTypeId)
If Nothing Is associatedContentType Then
    Throw New System.ArgumentException("The SPContentTypeId did not match an SPContentType in the SPSite.RootWeb", "associatedContentTypeId")
End If

Dim pageLayoutsByContentType As PageLayoutCollection = publishingSite.GetPageLayouts(associatedContentType, excludeHiddenLayouts)

' Update the Web to use these page layouts when creating pages.
publishingWeb.SetAvailablePageLayouts(pageLayoutsByContentType.ToArray(), resetAllSubsitesToInherit)

publishingWeb.Update()

'  Verify the expected results. Note: This is not required. It demonstrates
'  the results of calling the SetAvailablePageLayouts method.
'
System.Diagnostics.Debug.Assert((Not publishingWeb.IsAllowingAllPageLayouts))
System.Diagnostics.Debug.Assert((Not publishingWeb.IsInheritingAvailablePageLayouts))

Dim availablePageLayouts() As PageLayout = publishingWeb.GetAvailablePageLayouts()
For Each pageLayout As PageLayout In availablePageLayouts
    System.Diagnostics.Debug.Assert(pageLayout.AssociatedContentType.Id Is associatedContentTypeId)
Next pageLayout
        End Sub
    End Class
End Namespace

See Also

Reference

PublishingWeb Class

PublishingWeb Members

Microsoft.SharePoint.Publishing Namespace

GetAvailablePageLayouts

AllowAllPageLayouts

InheritAvailablePageLayouts