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

ありません。 私は、WebパーツをプログラムでWebPartManager経由で追加した後、その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); 

、ここでは、Webパーツに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); 

} 
+0

はい、これが私のやり方です。しかし、この場合は、Webパーツの1つのプロパティをサイト名で更新するだけで済むので、簡単なやり方ができることを期待しました。 –

0

私がこれを行うにはどのような方法を知りませんONET.XML。

ウェブパーツを追加する機能を使用することをおすすめします。機能ステープルを使用して、機能をサイト定義に関連付けることができます。このように、サイト定義に基づいてサイトが作成されると、その機能は自動的にアクティブになります。

プログラムでウェブパーツを追加するコードを書くと、SPWeb(つまりサイト)のプロパティにアクセスし、必要に応じてURLまたはサイト名を取得できるようになります。

+0

はい、私のソリューションにはすでにそのメカニズムがあります。私はサイトのタイトルにウェブパーツのプロパティを設定する必要があったので、私は簡単な修正を望んでいました。 –

関連する問題