Session 1 advanced content model wednesday 06 february 2007
This presentation is the property of its rightful owner.
Sponsored Links
1 / 38

Session 1: Advanced Content Model Wednesday 06 February 2007 PowerPoint PPT Presentation


  • 99 Views
  • Uploaded on
  • Presentation posted in: General

Sitecore for Experts “Sitecore skills for real men”. Session 1: Advanced Content Model Wednesday 06 February 2007. Today’s Program. Introduction to the subject Wildcard Items Linkdatabase Proxy items Discussion: Relations Questions & Additional reading End. Different Content Models.

Download Presentation

Session 1: Advanced Content Model Wednesday 06 February 2007

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Session 1 advanced content model wednesday 06 february 2007

Sitecore for Experts“Sitecore skills for real men”

Session 1: Advanced Content Model

Wednesday 06 February 2007


Today s program

Today’s Program

Introduction to the subject

Wildcard Items

Linkdatabase

Proxy items

Discussion: Relations

Questions & Additional reading

End


Different content models

Different Content Models

Single simple modelExamples: Yoursite.com

Simple division divided modelExamples: Yoursite.com/Divsion1, Yoursite.com/Division2

Multi site modelExamples: Yoursite.com, Yoursite.nl, Yoursite.dk, Yoursite.fr

Multi language modelExamples: Yoursite.com/Int, Yoursite.com/nl Yoursite.com/dk

Multi languagal and site modelExamples: Yoursite.com/Int, Yoursite.com/nl Yoursite.com/dk Yoursite.be/Int, Yoursite.be/nl Yoursite.be/fr


Different models have in common

Different models have in common…

Sharing of navigation

Sharing of layouts

Sharing of applications

Sharing of news

And legal content

Relations in different sites and languages

Thesauri?


Sitecore solution schematic

Sitecore solution schematic


1 wildcards items

1. Wildcards items


The case

The case

It’s required to allow all kind of url’s. Even those who doesn’t represent an item in Sitecore.

You want to make sure you can validate your input

Without using the QueryString, you are still possible to pass parameter trough (SEO)


Solution wildcards

Solution: Wildcards


Item resolving in the pipeline

Item resolving in the pipeline


Advantages

Advantages:

Good argument to prevent the usage of the QueryString

Ability to control the return messages such as 404’s.

It’s processed in the Pipelines, so it’s easily extendable.

Protects you against possible security issues such as database injections


Disadvantages

Disadvantages:

Aren’t able to set restrictions, so you have to write lots of code* for right processing.

No native code* support

It’s processed in the Pipelines, so it’s might cxause some preformence(not fully cachable on DataProvider level)

It responds by default as a valid page(in headers) but in your opinion this might not be right.

Support is limited to 4.3 and 5.3

* Code in this context means XSLT/C#/…?


Xslt usage example

XSLT Usage Example

    1 <xsl:template match="*" mode="main">

    2   <!-- Retrieve the first level and display when exists -->

    3   <xsl:variable name="level1" select="webutil:GetUrlName(0)" />

    4   <xsl:if test="$level1 != ''">

    5     <xsl:value-of select="$level1"/>

    6 

    7     <!-- Retrieve the first level and display when exists -->

    8     <xsl:variable name="level2" select="webutil:GetUrlName(1)" />

    9     <xsl:if test="$level2 != ''">

   10       &gt; <xsl:value-of select="$level2"/>

   11     </xsl:if>

   12   </xsl:if>

   13 </xsl:template>


C usage example

C# Usage Example

<%

Sitecore.Data.Items.Item currItem = Sitecore.Context.Item;

int currLevel = 0;

int maxLevel = GetWebRootLevel();

do

{

Response.Write(currItem.DisplayName+ "<br/>");

Response.Write(currLevel + "<br/>");

Response.Write(GetUrlName(currLevel) + "<br/>");

Response.Write("<hr/>");

currItem = currItem.Parent;

currLevel++;

}

while (currItem.Parent != null && currLevel <= maxLevel);

%>


C usage helpers

C# Usage Helpers

public string GetUrlName(Int32 index) {

string url = Sitecore.Web.WebUtil.GetRawUrl();

string path = url.Substring(1, url.LastIndexOf(".")-1);

string[] parts = path.Split("/".ToCharArray());

if (index < parts.Length)

return parts[parts.Length - 1 - index];

else

return "";

}

public int GetWebRootLevel()

{

string path = Sitecore.Context.Site.ContentStartPath;

return path.Split("/".ToCharArray()).Length;

}


2 linkdatabase

2. Linkdatabase


The case1

The case

You want to have a full list:

Family members in the Tree

Items you do link to

Items who links to you


Solution linkdatabase

Solution: Linkdatabase


Advantages1

Advantages:

Easily access from the API (Item.Links, Sitecore.Links)

Based on logical concept

Very fast(no preformence penalties)


Disadvantages1

Disadvantages:

‘Native’ not supported for XSLT

Seperated database, which implicates sync problems.

Hard to extend

Not all fields are supported

* Code in this context means XSLT/C#/…?


C example

C# Example

private static Item[] GetFeedsInDatabase(Database database, Language language){   TemplateItem feedTemplate = database.Templates[Constants.FeedTemplateID];   if (feedTemplate == null)   {      return null;   }   // Get all items refering to the feed template   ItemLink[] links = Globals.LinkDatabase.GetReferers(feedTemplate.InnerItem);   if (links == null)   {      return null;   }   ArrayList result = new ArrayList(links.Length);   // and filter the referers - we dont need to include masters   foreach(ItemLink link in links)   {      if (link.SourceDatabaseName == database.Name)      {         Item item = database.Items[link.SourceItemID, language];         if ((item != null) && (IsMaster(item) == false))         {            result.Add(item);         }      }   }   return (Item[])result.ToArray(typeof(Item));}


Possible cases

Possible cases

Where would you use this?

‘Related to’ links on the bottom of news/articles

Navigations (Item groups, etc)

As the technical basis for a Thesauris solution

Others?


3 proxy items

3. Proxy items


The case2

The case

You want to reuse content nodes in different trees or sites.

For SEO, you want to make sure /sitecore/content will not appear in URI’s.

Or

Divide navigation management from content


The solution

The solution

Proxy Items…


Proxy template

Proxy template

Source item: The item to copy it from

Target item: Place where the item will be located

Exclude subitems: In or exclude subitems

Source database: Might be any database


Creation of proxy items

Creation of Proxy items


Advantages2

Advantages:

Very fast as virtual items are also cached in the dataprovider

Easily to configure in the client(even more simple module available)

Very powerfull as the API seems to think it are real items

Ability to publish virtal items to real items for preformence improvements


Disadvantages2

Disadvantages:

Solution seems to change in every version of Sitecore?

Might be confusing for users

There are no visible possibilities to select an item in another database


Proxies in the api

Proxies in the API

Item.RuntimeSettings.IsVirtualIndicates whether the item is a virtual item or not.

Item.RuntimeSettings.IsExternal

Indicates whether the source item is from a database other than the target database.

Item.RuntimeSettings.OwnerDatabaseThe database that owns the source item. Note the Item.Database property will always return the target database!

Programmatically enable or disable proxies:

bool Sitecore.Context.ProxiesActive

Enable (set to true) or disable (set to false) proxies for the current session.

Sitecore.Data.Proxies.ProxyDisabler

Disable proxies for a block of code.

using (new Sitecore.Data.Proxies.ProxyDisabler()) {

// Proxies disabled here

}


4 discussion relations

4. Discussion: Relations


The case 1

The case 1

You want to create a collections of items, which aren’t always linked. This collections should be changeable. And is the members of this collections should ofcourse be defined by your own criteria.


The solution1

The solution?

That’s up to the experts…

What are the requirements?

What do you want to store?

Where do you want to store it?

How should it be retrievable?


The case 2

The case 2

You want to create a collections of items divided by keywords or maybe the alphabet.

Preformence is not an issue.

How can we solve this?


Next steps think about it

Next steps: Think about it!

Some review questions:

What kind of relations are available in Sitecore?

Why do you want to introduce more relations?

Are the examples provided clear? Do you have a better example?

What would be a nice addition to Sitecore for extending the content model?


Next steps additional reading

Next steps: Additional reading

http://sdn5.sitecore.net

http://www.lfn.dk

http://www.alexeyrusakov.com/sitecoreblog/

http://sitecore.alexiasoft.nl


Questions

Questions?

This is your last change…


Next month

Next month…

In the Sitecore API


The end

The end…

Thank you for your attention!

And please, think about it and spread the word…

Mistakes, corrections and additions can be mailed to Alex de Groot: [email protected] presentation is part of LECTRIC / Alex de Groot but can be used without any premission.


  • Login