Ejemplo n.º 1
0
 static HxPlaceholder()
 {
     Defaults = new PlaceholderSettings()
     {
         Color = ThemeColor.None,
         Size  = PlaceholderSize.Regular,
     };
 }
Ejemplo n.º 2
0
        public IHttpActionResult Get(string id)
        {
            Item            contentItem = null;
            SitecoreControl result      = new SitecoreControl();

            if (!string.IsNullOrEmpty(id))
            {
                contentItem = Sitecore.Context.Database.GetItem(id);
            }

            if (contentItem == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            var xmlRendering        = contentItem.Fields[Sitecore.FieldIDs.FinalLayoutField].Value;
            LayoutDefinition layout = LayoutDefinition.Parse(xmlRendering);
            DeviceDefinition device = layout.GetDevice(Sitecore.Context.Device.ID.ToString());

            if (device.DynamicProperties.Any())
            {
                var layoutID   = device.DynamicProperties.Where(r => r.Name == "s:l").FirstOrDefault().Value;
                var layoutItem = Sitecore.Context.Database.GetItem(layoutID);

                result.Name = layoutItem.Name;
                result.Path = layoutItem.Fields["Path"].Value;
                result.Type = layoutItem.TemplateName;
            }

            List <PlaceholderSettings> phResult = new List <PlaceholderSettings>();

            if (device.Placeholders != null && device.Placeholders.Count > 0)
            {
                foreach (PlaceholderDefinition ph in device.Placeholders)
                {
                    List <ControlSettings> ctrlResult = new List <ControlSettings>();

                    PlaceholderSettings phSetting = new PlaceholderSettings();
                    phSetting.Name = ph.DynamicProperties.Where(r => r.Name == "s:key").FirstOrDefault().Value;

                    foreach (RenderingDefinition rd in device.Renderings.ToArray())
                    {
                        if (rd != null && rd.DynamicProperties != null && rd.DynamicProperties.Count() > 0 && rd.DynamicProperties.Where(r => r.Name == "s:ph").Any() && rd.DynamicProperties.Where(r => r.Name == "s:ph").FirstOrDefault().Value == phSetting.Name)
                        {
                            ControlSettings ctrlSetting = new ControlSettings();
                            var             ctrlID      = rd.DynamicProperties.Where(r => r.Name == "s:id").FirstOrDefault().Value;
                            var             ctrlItem    = Sitecore.Context.Database.GetItem(ctrlID);

                            if (ctrlItem == null)
                            {
                                continue;
                            }

                            ctrlSetting.Name = ctrlItem.Name;
                            //ctrlSetting.path = ctrlItem.Fields["Path"].Value;
                            ctrlSetting.Type = ctrlItem.TemplateName;

                            List <ControlDataSources> cdsResult = new List <ControlDataSources>();
                            if (rd.DynamicProperties.Where(r => r.Name == "s:ds").Any())
                            {
                                ControlDataSources cds = new ControlDataSources();
                                var dsID   = rd.DynamicProperties.Where(r => r.Name == "s:ds").FirstOrDefault().Value;
                                var dsItem = Sitecore.Context.Database.GetItem(dsID);

                                if (dsItem == null)
                                {
                                    continue;
                                }

                                cds.Name     = dsItem.Name;
                                cds.Path     = dsItem.Paths.ContentPath;
                                cds.Template = dsItem.TemplateName;

                                List <ItemFields> fldResult = new List <ItemFields>();
                                dsItem.Fields.ReadAll();

                                IEnumerable <TemplateFieldItem> allFields = GetDataFields(dsItem.Template);

                                foreach (TemplateFieldItem field in allFields)
                                {
                                    ItemFields fld = new ItemFields
                                    {
                                        Name  = dsItem.Fields[field.ID].Name,
                                        Type  = dsItem.Fields[field.ID].Type,
                                        Value = dsItem.Fields[field.ID].Value
                                    };

                                    fldResult.Add(fld);
                                }

                                cds.Fields = new ItemFields[] { };
                                cds.Fields = fldResult.ToArray();

                                cdsResult.Add(cds);
                            }
                            ctrlSetting.DataSources = new ControlDataSources[] { };
                            ctrlSetting.DataSources = cdsResult.ToArray();

                            ctrlResult.Add(ctrlSetting);
                        }

                        phSetting.Controls = new ControlSettings[] { };
                        phSetting.Controls = ctrlResult.ToArray();
                    }
                    phResult.Add(phSetting);
                }
            }
            result.Placeholders = new PlaceholderSettings[] { };
            result.Placeholders = phResult.ToArray();
            return(new JsonResult <SitecoreControl>(result, new JsonSerializerSettings(), Encoding.UTF8, this));
        }