/// <summary> /// Render inner component presentations /// </summary> /// <param name="region"></param> /// <param name="sb"></param> protected override void OutputComponentPresentations(Region region, StringBuilder sb) { sb.Append("<componentPresentations>\n"); foreach (ComponentPresentationInfo cp in region.ComponentPresentations) { sb.Append("<componentPresentation>\n"); this.OutputComponent(cp.Component, sb); this.OutputTemplate(cp.Template, sb); sb.Append("</componentPresentation>\n"); } sb.Append("</componentPresentations>\n"); }
protected override void OutputComponentPresentations(Region region, StringBuilder sb) { // TODO: How to output component presentations??? // Have some kind of flexible and pluggable region strategy that handles this??? sb.Append("<componentPresentations>\n"); foreach (ComponentPresentationInfo cp in region.ComponentPresentations) { // TODO: Handle dynamic components here aswell this.SetSharedParameter("innerRegion", cp.InnerRegion); sb.Append(this.Engine.RenderComponentPresentation(cp.ComponentUri, cp.TemplateUri)); } sb.Append("</componentPresentations>\n"); }
protected void OutputRegion(Region region, StringBuilder sb) { sb.Append("<region name="); sb.Append(GetQuotedString(region.Name)); sb.Append(">\n"); this.OutputComponentPresentations(region, sb); if (region.Template != null) { this.OutputTemplate(region.Template, sb); } this.OutputConstraints(region, sb); sb.Append("</region>\n"); }
protected void OutputConstraints(Region region, StringBuilder sb) { sb.Append("<constraints>\n"); if (region.ComponentTypes != null) { // TODO: Decouple the constraints further in the region (link component or similiar) // Right now only Editable Region Constraint is implemented // sb.Append("<editableRegionConstraint minOccurs=\""); sb.Append(region.MinOccurs); sb.Append("\" maxOccurs=\""); sb.Append(region.MaxOccurs); sb.Append("\">\n"); sb.Append("<componentPresentationTypes>\n"); foreach (ComponentType componentType in region.ComponentTypes) { sb.Append("<componentPresentationType schemaId=\""); sb.Append(componentType.SchemaUri); sb.Append("\" templateId=\""); sb.Append(componentType.TemplateUri); sb.Append("\"/>\n"); } sb.Append("</componentPresentationTypes>\n"); sb.Append("</editableRegionConstraint>\n"); } sb.Append("</constraints>\n"); }
// Default implementation, is overriden by subclasses // protected virtual void OutputComponentPresentations(Region region, StringBuilder sb) { sb.Append("<componentPresentations>\n"); foreach (ComponentPresentationInfo cp in region.ComponentPresentations) { sb.Append(this.Engine.RenderComponentPresentation(cp.ComponentUri, cp.TemplateUri)); } sb.Append("</componentPresentations>\n"); }
private void OutputRegions(StringBuilder sb) { sb.Append("<regions>\n"); IComponentPresentationList componentPresentations = this.GetComponentPresentations(); Region region = null; Region innerRegion = null; int index = 0; foreach (Tridion.ContentManager.Templating.ComponentPresentation componentPresentation in componentPresentations) { Component component = new Component(componentPresentation.ComponentUri, Engine.GetSession()); ComponentTemplate template = new ComponentTemplate(componentPresentation.TemplateUri, Engine.GetSession()); Log.Debug("Checking component of type: " + component.Schema.Title); // TODO: How to handle region schemas?? What pattern to look for??? Find a more generic approach than looking on the schema title if (component.Schema.Title.Equals("DD4T Lite Region")) { if (region != null) { sb.Append(this.RenderRegion(region)); } region = new Region(component, template); innerRegion = null; } else if ( innerRegion != null && innerRegion.Accept(component, template) ) { innerRegion.AddComponentPresentation(new ComponentPresentationInfo(component, template)); } else if (region != null) { innerRegion = null; // Clear inner region Log.Debug("Adding component: " + component.Title + " to region: " + region.Name); ComponentPresentationInfo cpInfo = new ComponentPresentationInfo(component, template); region.AddComponentPresentation(cpInfo); if (this.IsContainerComponent(template)) { innerRegion = new Region(this.GetInnerRegion(template), index); cpInfo.InnerRegion = innerRegion; } } index++; } if (region != null) { Log.Debug("Outputting region: " + region.Name); sb.Append(this.RenderRegion(region)); } sb.Append("</regions>\n"); }
private string RenderRegion(Region region) { this.SetSharedParameter("region", region); return this.Engine.RenderComponentPresentation(region.Component.Id, region.Template.Id); }