Webpart to show Sitecollections/Subwebs

Webpart to show Sitecollections/Subwebs

This Webpart will show Sitecollections from the current Webapplication or Subwebs from the current web.

In the Webpart properties you can choose what the Webpart will show.

It uses the Logo URL of websites, if they are specified. The description of the website will show up as tooltip.

I am using the RepeatedControls class to build the items. This class really makes it easy to add entries by moving the layout functionality into an own class.

Create a new class

class Links : RepeatedControls
{
    private readonly Table _Table;
}

 

Add a default constructor

In the constructor, you can modify the header, footer and separator for the entries.

public Links()
{
    HeaderHtml = "<div>";
    FooterHtml = "</div>";
    SeparatorHtml = string.Empty;
 
    _Table = new Table {CssClass = "ms-itemstatic", CellSpacing = 0};
    _Table.Style.Add("padding", "3px 0px 3px 4px");
    Controls.Add(_Table);
}

 

Add elements to the class

public void AddHyperLink(string text, string toolTip, string url, string imageUrl)
{
    var row = new TableRow {Height = Unit.Pixel(16)};
    row.Attributes.Add("title", SPHttpUtility.HtmlEncode(toolTip));
    row.Attributes.Add("onmouseover", "this.className='ms-itemhover';MMU_PopMenuIfShowing(this);");
    row.Attributes.Add("onmouseout", "this.className='ms-itemstatic';");
    row.Attributes.Add("onclick", "window.navigate('" + url + "');");
 
    var imageCell = new TableCell();
    imageCell.HorizontalAlign = HorizontalAlign.Center;
    imageCell.Style.Add("padding-top", "1px");
    var image = new Image
                    {
                        AlternateText = string.Empty,
                        ImageUrl = (!string.IsNullOrEmpty(imageUrl) ? imageUrl : "/_layouts/images/setrect.gif")
                    };
    imageCell.Controls.Add(image);
    row.Cells.Add(imageCell);
 
    var linkCell = new TableCell
                       {
                           VerticalAlign = VerticalAlign.Top,
                           Width = Unit.Percentage(100),
                           CssClass = "ms-descriptiontext"
                       };
    linkCell.Style.Add("padding-left", "3px");
    var link = new Label {Text = SPHttpUtility.HtmlEncode(text)};
    linkCell.Controls.Add(link);
    row.Cells.Add(linkCell);
 
    _Table.Controls.Add(row);
}

 

Now that we have our own class to deal with navigation entries, we will use it.

Usage

var links = new Links();
Controls.Add(links);

 

To add items, simply type:

links.AddHyperLink(objects.Title, objects.Description, objects.Url, objects.ImageUrl);

Advantage

Why would you use your own class derived from RepeatedControls?

  • don’t mix functions and layout
  • keep you code small
  • improve the readability of your code

If you want to use this solution, you have to install the WSPBuilder Visual Studio extensions!

Download solution

Download source code

26. Oct. 2009 – Update to 1.0.1.0

Showsubwebs now uses web.ServeRelativeUrl

5 Comments

giuseppe

Reply

Hallo dein Webpart ist super.
Ich hab trotzdem eine Frage.
Ich habe 2 Zones Default und Extranet und die User vom Extranet bekommen bei der Site Collection Auflistung die URL vom Default. Kannst du mir weiterhelfen. Besten Dank

 

giuseppe

Reply

Hallo Danke für deine schnelle Anpassung, jedoch funktioniert es bei mir nicht.

Ich habe 3 Zonen URL
http://servername:port –> DEFAULT
http://intranet (NTLM AD) –> INTRANET
https://extranet (FBA – DBuser)–> EXTRANET

jedesmal geht der Link auf http://servername:port
Für einen User im http://extranet ist es nach dem Add vom Webpart nicht mehr möglich die Seite anzuzeigen -> ACCESS DENIED

 

giusppe

Reply

Hallo du hattest mir damals das Webpart angepasst. Habe noch etwas entdeckt, ich sehe nur die SiteCollection wenn ich Owner bin als Contributer wird mir die Seite nicht aufgelistet.

Gruss giuseppe

 

René Hézser

Reply

Moin Giuseppe,
welche Optionen hast du in den Webpart Eigenschaften ausgewählt.
Welche Site collections werden nicht angezeigt. Die der selben Webapplication?

Gruß
René

 

Giuseppe

Reply

Hallo Rene, folgendes habe ich probiert:
einmal mit der Eigenschaft”Show Sitecollections from all Webaplications” und einmal ohne diese Eigenschaft. Es werden nur die SiteCollections angezeigt wo ich “OWNER(ADMIN)” Berechtigung habe, die anderen Site Collection wo ich “Contributor” oder “Read” Berechtigung habe, werden nicht aufgelistet.
Danke für deine Unterstützung.
Gruss Giuseppe

 

Leave a Reply