كيفية تجديد نظرة مركب عندما تتطور المغلق مواضيعية?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/106141

  •  29-09-2020
  •  | 
  •  

سؤال

في موقع نشر الشركات ، نستخدم المظهر المركب للسماح لمديري المواقع باختيار نظام ألوان ذي علامة تجارية.

في الأساس ، قمنا بوضع علامة على البوابة باستخدام ملفين كس.A main.css الملف الذي يحتوي على معظم القواعد ، والذي يقع في Style library.وآخر theme.css يحتوي على جميع القواعد التي تعتمد على الموضوع.

لذلك يمكن للمستخدمين اختيار نظام الألوان الخاص بهم باستخدام قائمة" تغيير المظهر " في إعدادات الموقع.

هذا يعمل بشكل جيد جدا (بعض غوتشاس المتعلقة الصفحة الرئيسية للنظام ، ولكن هذا خارج النطاق).

ومع ذلك ، لدينا بعض التغييرات على الأدوات في theme.css ملف.بسبب محرك المظهر المركب ، لن تنعكس التغييرات في هذا الملف حتى يتم تطبيق السمة مرة أخرى.

نظرا لوجود العديد من المناطق في البوابة ، فمن غير الوارد إعادة إنشاء السمة يدويا في جميع المواقع الفرعية.

هل هناك أي طريقة لإجبار تجديد الموضوع?

إذا لزم الأمر ، يمكن استخدام برنامج نصي بوويرشيل.أعطى المحاولة:

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)

}

لكن هذا البرنامج النصي يكسر الموقع الفرعي.علاوة على ذلك ، يتم ترميز لوحة الألوان واسم السمة...ربما هناك مكان لرعاية القيم?

هل كانت مفيدة؟

المحلول

أرى أنك تمكنت من حل المشكلة باستخدام البرنامج النصي بوويرشيل والتحقق مما إذا كان يتم تطبيق موضوع ، وما إلى ذلك.

فقط لمعلوماتك على الرغم من ، على فئة سبتيم يمكنك أن تجد بعض الأساليب الثابتة:

  • للحصول على السمة الحالية ، يمكنك استخدام الأسلوب الثابت أوبن أبليدثيم
  • لتجديد لهم أنماط تحت عنوان يمكنك استخدام أسلوب ثابت إنفوسيثيمدستيلزفورويب
  • أو يمكنك ببساطة إعادة تطبيق السمة الحالية باستخدام طريقة أبليتو

بالطبع يمكنك استخدام هذه الأساليب في البرنامج النصي بوويرشيل الخاص بك كذلك.

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