Beispiel #1
0
        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);
        }