2009-06-10 100 views
2

我有一個自定義網站定義,在ONET.XML文件中。 我可以獲取正在創建的網站的URL和/或站點名稱,並將其用作onet.xml文件中的參數/名字對象嗎?有沒有辦法讓ONET.XML文件中創建網站的URL?

事情是這樣的:

<Modules> 
    <Module Name="Default" Url="" Path=""> 
     <File Url="default.aspx" NavBarHome="True"> 
     <AllUsersWebPart WebPartZoneID="Right" WebPartOrder="1"> 
      <![CDATA[ 
        <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" xmlns:iwp="http://schemas.microsoft.com/WebPart/v2/Image"> 
         <Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly> 
         <TypeName>Microsoft.SharePoint.WebPartPages.ImageWebPart</TypeName> 
         <FrameType>None</FrameType> 
         <Title>[NAME OF MY SITE] or [URL]</Title> 

回答

1

不給我所知。 我已經使用了一個解決方案,我通過WebPartManager以編程方式添加webparts,然後在該WebPart上使用反射設置屬性。

一個例子給WP添加到頁面:

public static void AddWebPart<T>(string webPartZone, SPFile page) 
{ 
    Type wpType = typeof(T); 
    AspNet.WebPart webPart = 
     (AspNet.WebPart)wpType.GetConstructor(new Type[0]).Invoke(new object[0]); 

    try 
    { 
     page.CheckOut();            
     SPLimitedWebPartManager wpManager = 
     page.GetLimitedWebPartManager(AspNet.PersonalizationScope.Shared); 
     wpManager.AddWebPart(webPart, "WP Zone Name", 0); 
     page.CheckIn("Added web part", SPCheckinType.MajorCheckIn); 

,這裏是如何設置的webpart根據企業的性質:

public static void SetWebPartProperties<T>(Dictionary<string, string> properties, 
              SPFile page) 
{ 

    Type wpType = typeof(T); 

    SPLimitedWebPartManager wpManager = 
    page.GetLimitedWebPartManager(AspNet.PersonalizationScope.Shared); 

    foreach (AspNet.WebPart wp in wpManager.WebParts) 
    { 
     if (wp.GetType() == wpType) 
     { 
      foreach (KeyValuePair<string, string> kvp in properties) 
      { 
       System.Reflection.PropertyInfo pi = wpType.GetProperty(kvp.Key); 
       if (pi.PropertyType == typeof(int)) 
        pi.SetValue(wp, int.Parse(kvp.Value, CultureInfo.InvariantCulture), null); 
       else if (pi.PropertyType == typeof(bool)) 
        pi.SetValue(wp, bool.Parse(kvp.Value), null); 

       pi.SetValue(wp, kvp.Value, null); 
      } 
      wpManager.SaveChanges(wp); 
     } 
    } 
    page.CheckIn("Changed properties of webpart", SPCheckinType.MajorCheckIn); 

} 
+0

是的,這也是我最終做的。但是,由於我只需要在網站名稱上更新網站部分的一個屬性,所以我希望能夠以簡單的方式進行操作。 – 2009-06-12 13:03:06

0

我不知道任何方式做到這一點ONET.XML。

我建議使用功能添加Web部件。您可以使用功能裝訂將該功能與網站定義相關聯。這樣,當根據您的網站定義創建網站時,您的功能會自動激活。

在您的功能中,您可以編寫代碼以編程方式添加您的Web部件,並且您將能夠訪問SPWeb(即站點)的屬性並根據需要獲取其URL或站點名稱。

+0

是的,我的解決方案中已經有了這個機制。由於我只需要在網站部分設置一個屬性,我希望能夠輕鬆修復。 – 2009-06-12 13:04:14

相關問題