private void AddNodes(XmlElement context, Keyword kw, string categoryName, string baseUrl) { //exclude keyword from site map XmlNodeList nd = null; if (kw.MetadataSchema != null && kw.Metadata != null) { nd = kw.Metadata.SelectNodes("*"); foreach (XmlNode n in nd) { if (n.Name == "ExcludeFromNavigation" && n.InnerText == "Yes") { return; } } } XmlElement kwElmt = CreateElement(context, kw, categoryName); // TODO: special CreateElement for keywords, with image, summary, etc Logger.Debug("started AddNodes for keyword " + kw.Title); if (nd != null && nd.Count > 0) { string followTaxonomy = null; ItemFields kwFields = new ItemFields(kw.Metadata, kw.MetadataSchema); foreach (XmlNode n in nd) { if (n.Name == "FollowTaxonomy") { followTaxonomy = ConvertUriToPublication(new TcmUri(n.InnerText), kw.Id); } else { if (kwFields[n.Name] is MultimediaLinkField) { kwElmt.SetAttribute(n.Name, new BinaryPublisher(Package, Engine).PublishMultimediaComponent(((MultimediaLinkField)kwFields[n.Name]).Value.Id)); } else if (kwFields[n.Name] is ComponentLinkField) { kwElmt.SetAttribute(n.Name, (((ComponentLinkField)kwFields[n.Name]).Value.Id)); } else { kwElmt.SetAttribute(n.Name, HttpUtility.HtmlEncode(n.InnerText)); } } } if (!string.IsNullOrEmpty(followTaxonomy)) { Category ft = Engine.GetObject(followTaxonomy) as Category; if (ft != null) { foreach (Keyword k in ft.GetKeywords(new KeywordsFilter(Engine.GetSession()) { IsRoot = true })) { AddNodes(kwElmt, k, ft.Title, ""); } } } else { foreach (Keyword k in kw.GetChildKeywords()) { AddNodes(kwElmt, k, categoryName, ""); } } } else { foreach (Keyword k in kw.GetChildKeywords()) { AddNodes(kwElmt, k, categoryName, ""); } } }
private void AddNodes(XmlElement context, Keyword kw, string categoryName, string baseUrl) { //exclude keyword from site map XmlNodeList nd = null; if (kw.MetadataSchema != null && kw.Metadata != null) { nd = kw.Metadata.SelectNodes("*"); foreach (XmlNode n in nd) { if (n.Name == "ExcludeFromNavigation" && n.InnerText == "Yes") return; } } XmlElement kwElmt = CreateElement(context, kw, categoryName); // TODO: special CreateElement for keywords, with image, summary, etc Logger.Debug("started AddNodes for keyword " + kw.Title); if (nd != null && nd.Count > 0) { string followTaxonomy = null; ItemFields kwFields = new ItemFields(kw.Metadata, kw.MetadataSchema); foreach (XmlNode n in nd) { if (n.Name == "FollowTaxonomy") followTaxonomy = ConvertUriToPublication(new TcmUri(n.InnerText), kw.Id); else { if (kwFields[n.Name] is MultimediaLinkField) kwElmt.SetAttribute(n.Name, new BinaryPublisher(Package, Engine).PublishMultimediaComponent(((MultimediaLinkField)kwFields[n.Name]).Value.Id)); else if (kwFields[n.Name] is ComponentLinkField) kwElmt.SetAttribute(n.Name, (((ComponentLinkField)kwFields[n.Name]).Value.Id)); else kwElmt.SetAttribute(n.Name, HttpUtility.HtmlEncode(n.InnerText)); } } if (!string.IsNullOrEmpty(followTaxonomy)) { Category ft = Engine.GetObject(followTaxonomy) as Category; if (ft != null) { foreach (Keyword k in ft.GetKeywords(new KeywordsFilter(Engine.GetSession()) { IsRoot = true })) AddNodes(kwElmt, k, ft.Title, ""); } } else { foreach (Keyword k in kw.GetChildKeywords()) AddNodes(kwElmt, k, categoryName, ""); } } else { foreach (Keyword k in kw.GetChildKeywords()) AddNodes(kwElmt, k, categoryName, ""); } }
public static Dictionary <string, Region> GetRegions(this Page page) { PageTemplate pageTemplate = page.PageTemplate; string cacheKey = pageTemplate.Id + "regions"; if (page.Session.Cache.Get("", cacheKey) != null) { return((Dictionary <string, Region>)page.Session.Cache.Get("", cacheKey)); } Dictionary <string, Region> regions = new Dictionary <string, Region>(); Dictionary <string, Keyword> themeKeywords = new Dictionary <string, Keyword>(); if (pageTemplate.Metadata != null) { ItemFields pageTemplateMeta = new ItemFields(pageTemplate.Metadata, pageTemplate.MetadataSchema); if (pageTemplateMeta.Contains("theme")) { KeywordField k = (KeywordField)pageTemplateMeta["theme"]; Keyword theme = k.Value; ChildKeywordsFilter f = new ChildKeywordsFilter(page.Session); foreach (Keyword keyword in theme.GetChildKeywords(f)) { string title = keyword.Title; string themepattern = theme.Title + " - "; string overridenregionname = title.Replace(themepattern, ""); themeKeywords.Add(overridenregionname, keyword); } } } foreach (ComponentPresentation cp in page.ComponentPresentations) { ComponentTemplate ct = cp.ComponentTemplate; if (ct.Metadata != null) { ItemFields metadata = new ItemFields(ct.Metadata, ct.MetadataSchema); if (metadata.Contains("region")) { KeywordField keywordField = (KeywordField)metadata["region"]; if (keywordField.Values.Count > 0) { Keyword regionKeyword = keywordField.Value; string regionName = regionKeyword.Title; if (regions.ContainsKey(regionName)) { regions[regionName].ComponentPresentations.Add(cp); } else { Region region = new Region { Name = regionName, ComponentPresentations = new List <ComponentPresentation> { cp } }; if (themeKeywords.ContainsKey(regionName)) { region.RegionDefinitionsKeyword = themeKeywords[regionName]; } else { region.RegionDefinitionsKeyword = regionKeyword; } regions.Add(regionName, region); } } } } } page.Session.Cache.Add("", cacheKey, regions); return(regions); }