2009-06-10 72 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

相关问题