有没有办法在ONET.XML文件中创建网站的URL?

时间:2009-06-10 13:47:06

标签: sharepoint moss

我在ONET.XML文件中有自定义网站定义。 我是否可以获取正在创建的站点的URL和/或站点名称,并将其用作onet.xml文件中的参数/名字对象?

这样的事情:

 <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>

2 个答案:

答案 0 :(得分: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);

以下是如何在webparts上设置proprties:

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);

}

答案 1 :(得分:0)

我不知道用ONET.XML做任何事情。

我建议使用功能添加网页部件。您可以使用功能装订将该功能与网站定义相关联。这样,当根据您的网站定义创建网站时,您的功能会自动激活。

在您的功能中,您可以编写代码以编程方式添加您的Web部件,并且您将能够访问SPWeb(即网站)的属性,并根据需要获取其URL或站点名称。