는 방법을 다시 생성 합성 보면 테마 설정이 가능하며,css 진화?
-
29-09-2020 - |
문제
기업 사이트에 게시,우리가 사용하여 종합 보을 허용하는 사이트 관리자를 선택하는 브랜드의 색 구성표입니다.
기본적으로,우리는 브랜드 포털 사용하여 두 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