문제

기업 사이트에 게시,우리가 사용하여 종합 보을 허용하는 사이트 관리자를 선택하는 브랜드의 색 구성표입니다.

기본적으로,우리는 브랜드 포털 사용하여 두 css 파일이 있습니다.A main.css 파일의 대부분을 포함하는 규칙에 있는 Style library.고 다른 theme.css 는 포함되는 모든 규칙에 의존합니다.

그래서 사용자가 선택할 수 있습니다 자신의 색상을 사용하여"외관을 변경"메뉴에서는 사이트로 설정합니다.

이것은 작업을 아주 잘(일부 개는 시스템과 관련된 마스 페이지로,하지만 그의 범위)입니다.

그러나 우리는 어떤 변화를 구현에 theme.css 파일입니다.기 때문에 종합 보기 엔진,변경이 이 파일에 반영되지 않습까지 테마에 적용된 다.

이 있기 때문에 많은 지역 포털에서,그것은 질문을 수동으로 생성 테마에 모든 하위 사이트입니다.

방법은 없을 강제로 재생의 테마는?

필요한 경우,powershell 스크립트를 사용할 수 있습니다.나는 해:

function ReapplyTheme{
    param(
        [Microsoft.SharePoint.SPWeb]$Web
    )

    $file=$web.GetFile($web.ServerRelativeUrl.TrimEnd('/') + "/_catalogs/theme/15/Palette_rouge.spcolor")
    $theme=[Microsoft.SharePoint.Utilities.SPTheme]::Open("Name of my theme", $file)
    $theme.ApplyTo($web, $false)

}

하지만 이 스크립트를 나누기 하위 사이트입니다.또한,색상 팔레트 테마의 이름은 하드...어쩌면이 어딘가에 보도합니다.

도움이 되었습니까?

해결책

나는 당신이 볼 관리 문제를 해결하기 위해 사용하는 쉘 스크립트는지를 확인하는 테마를 적용,등등.

그냥 당신의 정보에 대하여만에 SPTheme 클래스를 찾을 수 있습니다 몇 가지 정적 방법:

  • 을 얻을 현재 테마,사용할 수 있는 정적 방법 OpenAppliedTheme
  • 재생들을 테마로 스타일을 사용할 수 있는 정적 방법 EnforceThemedStylesForWeb
  • 또는 당신은 단순히 다시 현재의 테마 사용하여 ApplyTo 방법

물론 사용할 수 있는 이러한 방법에 있는 당신의 PowerShell 스크립트뿐만 아니라.

public static void ReapplyCurrentComposedLook(SPWeb web)
{
  // try to get the currently applied theme
  SPTheme theme = SPTheme.OpenAppliedTheme(web);
  if (theme == null)
  {
    // return if no theme is applied
    return;
  }

  // reinforce the styles for the web..
  SPTheme.EnforceThemedStylesForWeb(web);

  // .. or simply reapply the whole theme.
  theme.ApplyTo(web, true);
}

다른 팁

마지막으로 만든 스크립트가 발전해 나갑니다.

기본적으로,각 하위 웹 난 후로 구성되어 보기 위해"0",현재 테마입니다.또한 속성을 확인하십시오 웹 개체 확인하는 경우 웹사이 설치를 상속하는 부모는 없습니다.

의 데이터를 사용하여 발로 구성되어 보고,내가 다시 생성할 수 있습니다.

아주 잘 작동하는 것 같다.

여기에는 이 스크립트:

#requires -PSSnapin Microsoft.SharePoint.PowerShell

param(
    [Parameter(Mandatory = $true, Position=0, ParameterSetName='SPSite')]
    [Microsoft.SharePoint.PowerShell.SPSitePipeBind]$Site,
    [Parameter(Mandatory = $true, Position=0, ParameterSetName='SPWeb')]
    [Microsoft.SharePoint.PowerShell.SPWebPipeBind]$Web,
    [Parameter(Position=1)]
    [Switch]$Recurse=$true
    #TODO: add argument to allow specify a specific theme, instead of regenerating it
)

$actualWeb = if(-Not $Web) {
    $site.Read().RootWeb
} else{
    $Web.Read()
}


function Get-ThemeData{
    param(
        [Parameter(Mandatory=$true)]
        [Microsoft.SharePoint.SPWeb]$Web
    )


    $designList = $Web.GetList($web.ServerRelativeUrl.TrimEnd('/') + "/_catalogs/design")
    $query = New-Object Microsoft.SharePoint.SPQuery
    $query.ViewFieldsOnly = $true
    $query.ViewFields = "<FieldRef Name='ThemeUrl' /><FieldRef Name='ImageUrl' /><FieldRef Name='FontSchemeUrl' />"
    $query.Query = "<Where><Eq><FieldRef Name='DisplayOrder' /><Value Type='Number'>0</Value></Eq></Where>";

    $designItem = $designList.GetItems($query)[0]

    $resultProperties = @{
        "Web" = $Web.ServerRelativeUrl
        "FontSchemeUrl" = $designItem["FontSchemeUrl"]
        "ThemeUrl" = $designItem["ThemeUrl"]
        "ImageUrl" = $designItem["ImageUrl"]
        "InheritsThemedCssFolderUrl" = [bool]::Parse($web.AllProperties["__InheritsThemedCssFolderUrl"])
        "InheritsCustomMasterUrl" = [bool]::Parse($web.AllProperties["__InheritsCustomMasterUrl"])
        "InheritsMasterUrl" = [bool]::Parse($web.AllProperties["__InheritsMasterUrl"])
        MasterUrl=$web.MasterUrl
        CustomMasterUrl=$web.CustomMasterUrl
    }

    New-Object PSObject -Property $resultProperties 
}

function Process-SPWeb{
    param(
        [Parameter(Mandatory=$true)]
        [Microsoft.SharePoint.SPWeb]$Web
    )
    Write-Host "Traitement de $($web.ServerRelativeUrl)"

    $themeData = Get-ThemeData $Web

    if(-not $themeData.InheritsThemedCssFolderUrl){
        $color = if($themeData.ThemeUrl) { $web.GetServerRelativeUrlFromUrl((New-Object Microsoft.SharePoint.SPFieldUrlValue($themeData.ThemeUrl)).Url) }
        $font = if($themeData.FontSchemeUrl) { $web.GetServerRelativeUrlFromUrl((New-Object Microsoft.SharePoint.SPFieldUrlValue($themeData.FontSchemeUrl)).Url) }
        $image = if($themeData.ImageUrl) { $web.GetServerRelativeUrlFromUrl((New-Object Microsoft.SharePoint.SPFieldUrlValue($themeData.ImageUrl)).Url) }


        $web.ApplyTheme($color,$font,$image, $false)
        $web2 = Get-SPWeb $web.url
        $web2.MasterUrl = $themeData.MasterUrl
        $web2.CustomMasterUrl = $themeData.CustomMasterUrl
        $web2.Update()
        $web2.Dispose()

        Write-Warning "Thème regénéré sur $($web.ServerRelativeUrl)"
    }

    if($Recurse){
        $Web.Webs | % { Process-SPWeb $_ }

    }

}


Process-SPWeb $actualWeb
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top