views:

338

answers:

1

I've got a page layout for a publishing site with an odd behaviour.

Imagine a publishing site (site) with a subsite (subsite1) which has the following pages (page1 [default], page2, and page3)

for page 2 and page three the breadcrumb renders correctly:

site > subsite1 > page2 
site > subsite1 > page3

however for the default page the breadcrumb only renders as

site > subsite1

Any idea how to force it to display the title of the default page too?

A: 

After much searching and failing repeatedly I decided to use an AJAX include. Before anyone marks me down for using the devils language (VB.Net) I only used it as I had other developers who were using and maintaing this code so they had to be able to read it...

The include did the following:

  1. split the current url into its constituent parts
  2. For each part get the Sharepoint URL and Sharepoint Web
  3. Print the Title of the sharepoint web
  4. If the part is a page, get the page title and print it

This isnt the final code (i'm going to refactor it tonight):

  Dim lsPage = Request.Item("CurrentPage")
  Dim TravelURL as string = "http://site/"
  Dim aryURLSections() = lsPage.Replace(TravelUrl, "").Split("/")
  Dim i as integer

  Response.Write("<span class='breadcrumbCurrent'>You are in &gt;</span> <span class='ms-sitemapdirectional'><a href='" & TravelUrl & "' title='Home'>Home</a> &gt; </span>")

  for i = 0 to (aryURLSections.Length -1)
    Dim PositionString as string = aryURLSections(i)
    if PositionString.Contains(".aspx") then
     'Render page
     Dim psite as SPSite = new SPSite(TravelUrl)
     Dim pobjSite As SPWeb = psite.OpenWeb() 
     Dim lList as SPList
     Dim lPage As SPListItem
     lList = pobjSite.Lists("Pages")
         If Not lList Is Nothing Then
             For Each lPage In lList.Items
             IF lsPage.ToUpper.Contains(lPage.Url.ToUpper) Then
       Response.Write("<span class='breadcrumbCurrent' >" & lPage.Title & "</span>")
          Else
       'Response.Write("<br>" & lPage.Url & " " & lsPage)
          End If
      Next
     End if
    Else if PositionString.Equals("Pages")
     ' do nothing
    else
     'render site
     TravelUrl = TravelUrl & PositionString & "/"
     'Response.Write(TravelUrl & " > ")
     Dim site as SPSite = new SPSite(TravelUrl)

     Dim objSite As SPWeb = site.OpenWeb() 
     Dim PubWeb = PublishingWeb.GetPublishingWeb(objSite)

     Response.Write("<span class='ms-sitemapdirectional'><a href='" & TravelUrl & "' title='" & PubWeb.Title & "'>" & PubWeb.Title & "</a> &gt; </span>")
    End if

    Next i
Mauro