Download presentation
Presentation is loading. Please wait.
Published byScott Bishop Modified over 9 years ago
1
Session 1: Advanced Content Model Wednesday 06 February 2007 Sitecore for Experts “Sitecore skills for real men”
2
Introduction to the subject 1.Wildcard Items 2.Linkdatabase 3.Proxy items 4.Discussion: Relations Questions & Additional reading End Today’s Program
3
1.Single simple model Examples: Yoursite.com 2.Simple division divided model Examples: Yoursite.com/Divsion1, Yoursite.com/Division2 3.Multi site model Examples: Yoursite.com, Yoursite.nl, Yoursite.dk, Yoursite.fr 4.Multi language model Examples: Yoursite.com/Int, Yoursite.com/nl Yoursite.com/dk 5.Multi languagal and site model Examples: Yoursite.com/Int, Yoursite.com/nl Yoursite.com/dk Yoursite.be/Int, Yoursite.be/nl Yoursite.be/fr Different Content Models
4
Sharing of navigation Sharing of layouts Sharing of applications Sharing of news And legal content Relations in different sites and languages Thesauri? Different models have in common…
5
Sitecore solution schematic
6
1. Wildcards items
7
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) The case
8
Solution: Wildcards
9
Item resolving in the pipeline Site Resolve site so the Rootpath is defined Aliases Figure out if the item is an alias Item Try to locate the item Wilcards When the item isn’t located, look if there are any wildcards
10
1.Good argument to prevent the usage of the QueryString 2.Ability to control the return messages such as 404’s. 3.It’s processed in the Pipelines, so it’s easily extendable. 4.Protects you against possible security issues such as database injections Advantages:
11
1.Aren’t able to set restrictions, so you have to write lots of code* for right processing. 2.No native code* support 3.It’s processed in the Pipelines, so it’s might cxause some preformence(not fully cachable on DataProvider level) 4.It responds by default as a valid page (in headers) but in your opinion this might not be right. 5.Support is limited to 4.3 and 5.3 Disadvantages: * Code in this context means XSLT/C#/…?
12
1 2 3 4 5 6 7 8 9 10 > 11 12 13 XSLT Usage Example
13
<% Sitecore.Data.Items.Item currItem = Sitecore.Context.Item; int currLevel = 0; int maxLevel = GetWebRootLevel(); do { Response.Write(currItem.DisplayName+ " "); Response.Write(currLevel + " "); Response.Write(GetUrlName(currLevel) + " "); Response.Write(" "); currItem = currItem.Parent; currLevel++; } while (currItem.Parent != null && currLevel <= maxLevel); %> C# Usage Example
14
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; } C# Usage Helpers
15
2. Linkdatabase
16
You want to have a full list: 1.Family members in the Tree 2.Items you do link to 3.Items who links to you The case
17
Solution: Linkdatabase
18
1.Easily access from the API (Item.Links, Sitecore.Links) 2.Based on logical concept 3.Very fast(no preformence penalties) Advantages:
19
1.‘Native’ not supported for XSLT 2.Seperated database, which implicates sync problems. 3.Hard to extend 4.Not all fields are supported Disadvantages: * Code in this context means XSLT/C#/…?
20
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)); } C# Example
21
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? Possible cases
22
3. Proxy items
23
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 case
24
Proxy Items… The solution
25
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 Proxy template
26
Creation of Proxy items
27
1.Very fast as virtual items are also cached in the dataprovider 2.Easily to configure in the client(even more simple module available) 3.Very powerfull as the API seems to think it are real items 4.Ability to publish virtal items to real items for preformence improvements Advantages:
28
1.Solution seems to change in every version of Sitecore? 2.Might be confusing for users 3.There are no visible possibilities to select an item in another database Disadvantages:
29
Item.RuntimeSettings.IsVirtual Indicates 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.OwnerDatabase The 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 } Proxies in the API
30
4. Discussion: Relations
31
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 case 1
32
That’s up to the experts… 1.What are the requirements? 2.What do you want to store? 3.Where do you want to store it? 4.How should it be retrievable? The solution?
33
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? The case 2
34
Some review questions: 1.What kind of relations are available in Sitecore? 2.Why do you want to introduce more relations? 3.Are the examples provided clear? Do you have a better example? 4.What would be a nice addition to Sitecore for extending the content model? Next steps: Think about it!
35
http://sdn5.sitecore.net http://www.lfn.dk http://www.alexeyrusakov.com/sitecoreblog/ http://sitecore.alexiasoft.nl Next steps: Additional reading
36
This is your last change… Questions?
37
Next month… In the Sitecore API
38
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: a.degroot@lectric.nl The presentation is part of LECTRIC / Alex de Groot but can be used without any premission. The end…
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.