Search This Blog

2011-02-12

Create Custom Sitepages in Sharepoint 2007

Step 1-Create a Web Application project "CustSitePages" and a class library project "CustSitePagesClass"
Step 2-Make the folder structure as follows




Step 3-"SiteFileViewer.ascx" will be as follows-
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" %>
<%@ Register Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
Namespace="Microsoft.SharePoint.WebControls" TagPrefix="SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint" %>


<script runat="server">

protected override void OnLoad(EventArgs e) {
SPWeb site = SPContext.Current.Web;
SPFolder rootFolder = site.RootFolder;
TreeNode rootNode = new TreeNode(site.Title, "", @"\_layouts\images\FPWEB16.GIF");
rootNode.NavigateUrl = site.ServerRelativeUrl;
LoadFolderNodes(rootFolder, rootNode);
treeSitesFiles.Nodes.Add(rootNode);
treeSitesFiles.ExpandDepth = 1;
}

protected void LoadFolderNodes(SPFolder folder, TreeNode folderNode) {

foreach (SPFolder childFolder in folder.SubFolders) {
TreeNode childFolderNode = new TreeNode(childFolder.Name, "", @"\_layouts\images\FOLDER16.GIF");
childFolderNode.NavigateUrl = childFolder.ServerRelativeUrl;
LoadFolderNodes(childFolder, childFolderNode);
folderNode.ChildNodes.Add(childFolderNode);
}

foreach (SPFile file in folder.Files){
TreeNode fileNode;
if (file.CustomizedPageStatus == SPCustomizedPageStatus.Uncustomized) {
fileNode = new TreeNode(file.Name, "", @"\_layouts\images\NEWDOC.GIF");
fileNode.NavigateUrl = file.ServerRelativeUrl;
}
else {
fileNode = new TreeNode(file.Name, "", @"\_layouts\images\RAT16.GIF");
fileNode.NavigateUrl = file.ServerRelativeUrl;
}
folderNode.ChildNodes.Add(fileNode);
}


}


</script>

<asp:TreeView NodeStyle-HorizontalPadding="6" ID="treeSitesFiles" runat="server" EnableViewState="false" />


Step 4-"UserControl1.ascx" will be as follows-
<%@ Control Language="C#" %>

<script runat="server">

protected void cmdAddCustomer_Click(object sender, EventArgs e) {
string msg = "Customer " + txtName.Text + " has been added.";
lblStatus.Text = msg;
}

</script>


<h4>Add New Customer</h4>
<table>
<tr>
<td>Name:</td>
<td><asp:TextBox ID="txtName" runat="server" /></td>
</tr>
<tr>
<td>Address:</td>
<td><asp:TextBox ID="txtAddress" runat="server" /></td>
</tr>
<tr>
<td>City:</td>
<td><asp:TextBox ID="txtCity" runat="server" /></td>
</tr>
<tr>
<td>
State:
</td>
<td>
<asp:TextBox ID="txtState" runat="server" />
</td>
</tr>

<tr>
<td>
Zip:
</td>
<td>
<asp:TextBox ID="txtZip" runat="server" />
</td>
</tr>


</table>

<p>
<asp:Button ID="cmdAddCustomer" runat="server" Text="Add Customer" OnClick="cmdAddCustomer_Click" />
</p>
<p>
<asp:Label ID="lblStatus" runat="server" Text="" />
</p>

Step 5-"UserControl2.ascx" will be as follows-
<%@ Control Language="C#" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>

<script runat="server">
protected override void OnLoad(EventArgs e) {
SPWeb site = SPContext.Current.Web;
lblDisplay.Text = "Current Site: " + site.Url;
}
</script>

<asp:Label ID="lblDisplay" runat="server" />


Step 6-"CustSitePages_All.aspx" will be as follows-
<%@ Page Language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"
meta:progid="SharePoint.WebPartPage.Document" %>

<%@ Register Assembly="CustSitePagesClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30534ee939de1c1d"
Namespace="CustSitePagesClass" TagPrefix="CustomSitePages" %>
<%@ Register TagPrefix="luc" TagName="UserControl1" Src="~/_controltemplates/MRB/UserControl1.ascx" %>
<%@ Register TagPrefix="luc" TagName="UserControl2" Src="~/_controltemplates/MRB/UserControl2.ascx" %>
<%@ Register Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
Namespace="Microsoft.SharePoint.WebControls" TagPrefix="SharePoint" %>
<%@ Register TagPrefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages"
Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<asp:Content ID="main" runat="server" ContentPlaceHolderID="PlaceHolderMain">
<table width="100%">
<tr>
<td colspan="2">
<h3>
Page 1 - Hello World</h3>
A simple page template used to create site pages
</td>
</tr>
<tr>
<td colspan="2">
<h3>
Page 2 - Server-side scripts and safe mode</h3>
<% Response.Write("Hello world from server-side script"); %>
</td>
</tr>
<tr>
<td colspan="2">
<h3>
Page 3 - Custom Control Demo</h3>
<CustomSitePages:CustSitePagesCls ID="cc1" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<h3>
Page 4- User Control Demo</h3>
<luc:UserControl1 ID="id1" runat="server" />
<hr />
<luc:UserControl2 ID="id2" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<h3>
Page 5- Built-in WSS Controls</h3>
<h4>
AspMenu control</h4>
<SharePoint:AspMenu ID="MyMenu" DataSourceID="SiteMapDataSource1" runat="server"
Orientation="Vertical" StaticDisplayLevels="2" MaximumDynamicDisplayLevels="1"
BorderWidth="1" StaticMenuItemStyle-BorderWidth="2" />
<asp:SiteMapDataSource ShowStartingNode="False" SiteMapProvider="SPNavigationProvider"
ID="SiteMapDataSource1" runat="server" StartingNodeUrl="sid:1002" />
<br />
<hr />
<h4>
SPTreeView control</h4>
<SharePoint:SPTreeView ID="WebTreeView" runat="server" ShowLines="true" DataSourceID="TreeViewDataSource1"
ExpandDepth="2" ShowExpandCollapse="true" ShowCheckBoxes="All" SelectedNodeStyle-CssClass="ms-tvselected"
NodeStyle-CssClass="ms-navitem" NodeStyle-HorizontalPadding="2" SkipLinkText=""
NodeIndent="12" ExpandImageUrl="/_layouts/images/tvplus.gif" CollapseImageUrl="/_layouts/images/tvminus.gif"
NoExpandImageUrl="/_layouts/images/tvblank.gif">
</SharePoint:SPTreeView>
<SharePoint:SPHierarchyDataSourceControl runat="server" ID="TreeViewDataSource1"
RootContextObject="Web" IncludeDiscussionFolders="true" ShowFolderChildren="true" />
</td>
</tr>
<tr>
<td colspan="2">
<h3>
Page 6- Custom Web Part Page</h3>
</td>
</tr>
<tr>
<td valign="top" style="width: 50%">
<WebPartPages:WebPartZone ID="Left" runat="server" FrameType="TitleBarOnly" Title="Left Web Part Zone" />
</td>
<td valign="top" style="width: 50%">
<WebPartPages:WebPartZone ID="Right" runat="server" FrameType="TitleBarOnly" Title="Right Web Part Zone" />
</td>
</tr>
</table>
</asp:Content>


Step 7-"Feature.xml" will be as follows-
<Feature
Id="EE3300F0-D4E3-4c0d-8F07-6D965F6D6D6D"
Title="My Custom Site Pages"
Description="THIS IS A EXAMPLE OF CUSTOM SITE PAGE"
Scope="Web"
Hidden="false"
ImageUrl="menuprofile.gif"
ReceiverAssembly="CustSitePagesClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30534ee939de1c1d"
ReceiverClass="CustSitePagesClass.FeatureReceiver"
xmlns="http://schemas.microsoft.com/sharepoint/">

<ElementManifests>
<ElementManifest Location="Elements.xml"/>
</ElementManifests>

</Feature>


Step 8-"Elements.xml" will be as follows-
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

<Module Path="PageTemplates" Url="SitePages" >
<!-- provision standard pages -->

/*
<File Url="Page01.aspx" Type="Ghostable" />
<File Url="Page02.aspx" Type="Ghostable" />
<File Url="Page03.aspx" Type="Ghostable" />
<File Url="Page04.aspx" Type="Ghostable" />
<File Url="Page05.aspx" Type="Ghostable" />
<File Url="Page06.aspx" Type="Ghostable" />
<!-- provision Web Part pages -->
<File Url="WebPartPage.aspx" Name="WebPartPage01.aspx" Type="Ghostable" />
<File Url="WebPartPage.aspx" Name="WebPartPage02.aspx" Type="Ghostable" />
<!-- provision Web Part page with Web Parts inside -->
<File Url="WebPartPage.aspx" Name="WebPartPage03.aspx" Type="Ghostable" /> */

<File Url="CustSitePages_All.aspx" Name="CustSitePages_All.aspx" Type="Ghostable" />

</Module>

</Elements>

Step 9-"CustSitePagesCls.cs" will be as follows-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.Web.UI.WebControls;
using System.Web.UI;

namespace CustSitePagesClass
{
public class CustSitePagesCls : WebControl
{
protected override void RenderContents(HtmlTextWriter output)
{
SPWeb site = SPContext.Current.Web;
output.Write("Current Site: " + site.Title);
output.Write("<br/>");
output.Write("Current Site ID: " + site.ID.ToString());
}
}
}


Step 10-FeatureReceiver.cs will be as follows-
using System;
using System.Web.UI.WebControls.WebParts;
using System.Xml;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Navigation;

namespace CustSitePagesClass
{
class FeatureReceiver : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
// get a hold off current site in context of feature activation
SPWeb site = (SPWeb)properties.Feature.Parent;
SPNavigationNodeCollection topNav = site.Navigation.TopNavigationBar;

// create dropdown menu for custom site pages
SPNavigationNode DropDownMenu1 =
new SPNavigationNode("Custom Site Pages", "", false);
topNav[0].Children.AddAsLast(DropDownMenu1);
DropDownMenu1.Children.AddAsLast(
new SPNavigationNode("Site Page 1", "SitePages/Page01.aspx"));

DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Site Page 2", "SitePages/Page02.aspx"));
DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Site Page 3", "SitePages/Page03.aspx"));
DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Site Page 4", "SitePages/Page04.aspx"));
DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Site Page 5", "SitePages/Page05.aspx"));
DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Site Page 6", "SitePages/Page06.aspx"));

// create dropdown menu for custom Web Part Pages
SPNavigationNode DropDownMenu2 = new SPNavigationNode("Custom Web Part Pages", "", false);
topNav[0].Children.AddAsLast(DropDownMenu2);
DropDownMenu2.Children.AddAsLast(new SPNavigationNode("Web Part Page 1", "SitePages/WebPartPage01.aspx"));
DropDownMenu2.Children.AddAsLast(new SPNavigationNode("Web Part Page 2", "SitePages/WebPartPage02.aspx"));
DropDownMenu2.Children.AddAsLast(new SPNavigationNode("Web Part Page 3", "SitePages/WebPartPage03.aspx"));

SPFile page = site.GetFile("SitePages/WebPartPage02.aspx");
SPLimitedWebPartManager mgr;
mgr = page.GetLimitedWebPartManager(PersonalizationScope.Shared);
// add Web Part to Left Zone
ContentEditorWebPart wp1 = new ContentEditorWebPart();
wp1.Title = "My Most Excellent Title";
wp1.ChromeType = PartChromeType.TitleOnly;
wp1.AllowClose = false;
XmlDocument doc = new XmlDocument();
string ns1 = "http://schemas.microsoft.com/WebPart/v2/ContentEditor";
XmlElement elm = doc.CreateElement("Content", ns1);
elm.InnerText = "This Web Part was added through code";
wp1.Content = elm;
mgr.AddWebPart(wp1, "Left", 0);
// add Web Part to Right Zone
ImageWebPart wp2 = new ImageWebPart();
wp2.ChromeType = PartChromeType.None;
wp2.ImageLink = @"/_layouts/images/IPVW.GIF";
mgr.AddWebPart(wp2, "Right", 0);

//code for CustomSitePages_ALL
//SPFile pageAll = site.GetFile("SitePages/WebPartPage02.aspx");
SPFile pageAll = site.GetFile("SitePages/CustomSitePages_ALL");
SPLimitedWebPartManager mgrAll;
mgrAll = pageAll.GetLimitedWebPartManager(PersonalizationScope.Shared);
// add Web Part to Left Zone
ContentEditorWebPart wpAll = new ContentEditorWebPart();
wpAll.Title = "My Most Excellent Title";
wpAll.ChromeType = PartChromeType.TitleOnly;
wpAll.AllowClose = false;
XmlDocument docAll = new XmlDocument();
string nsAll = "http://schemas.microsoft.com/WebPart/v2/ContentEditor";
XmlElement elmAll = docAll.CreateElement("Content", nsAll);
elmAll.InnerText = "This Web Part was added through code";
wpAll.Content = elmAll;
mgrAll.AddWebPart(wpAll, "Left", 0);
// add Web Part to Right Zone
ImageWebPart wp2All = new ImageWebPart();
wp2All.ChromeType = PartChromeType.None;
wp2All.ImageLink = @"/_layouts/images/IPVW.GIF";
mgrAll.AddWebPart(wp2All, "Right", 0);
}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWeb site = (SPWeb)properties.Feature.Parent;
// delete folder of site pages provisioned during activation
SPFolder sitePagesFolder = site.GetFolder("SitePages");
sitePagesFolder.Delete();

SPNavigationNodeCollection topNav = site.Navigation.TopNavigationBar;

for (int i = topNav[0].Children.Count - 1; i >= 0; i--)
{
if (topNav[0].Children[i].Title == "Custom Site Pages" ||
topNav[0].Children[i].Title == "Custom Web Part Pages")
{
// delete node
topNav[0].Children[i].Delete();
}
}
}

public override void FeatureInstalled(SPFeatureReceiverProperties properties)
{
// new NotImplementedException();
}

public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
{
//throw new NotImplementedException();
}
}
}


Step 11-Copy the dll of CustSitePagesClass project to the GAC and copy the CustSitePages project files in the 12 hives as per the folder structure.

Step 12-Install & activate the feature "CustSitePages"
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN>stsa
dm -o installfeature -name CustSitePages -force

Step 13-Browse the URL as follows-
http://vpc1:2010/sites/SharepointPoC/Sitepages/CustSitePages_All.aspx

Step 14-You can see the output as follows-


No comments: