Beispiel #1
0
        /// <summary>
        /// Renders all Regions (of the current Page or Region Model), except the ones with given names.
        /// </summary>
        /// <param name="htmlHelper">The HtmlHelper instance on which the extension method operates.</param>
        /// <param name="exclude">The (comma separated) name(s) of the Regions to exclude. Can be <c>null</c> (the default) to render all Regions.</param>
        /// <param name="containerSize">The size (in grid column units) of the containing element.</param>
        /// <returns>The rendered HTML.</returns>
        /// <remarks>This method will throw an exception if the current Model does not represent a Page.</remarks>
        public static MvcHtmlString DxaRegions(this HtmlHelper htmlHelper, string exclude = null, int containerSize = 0)
        {
            using (new Tracer(htmlHelper, exclude, containerSize))
            {
                RegionModelSet regions = GetRegions(htmlHelper.ViewData.Model);

                IEnumerable <RegionModel> filteredRegions;
                if (string.IsNullOrEmpty(exclude))
                {
                    filteredRegions = regions;
                }
                else
                {
                    string[] excludedNames = exclude.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    filteredRegions = regions.Where(r => !excludedNames.Any(n => n.Equals(r.Name, StringComparison.InvariantCultureIgnoreCase)));
                }

                StringBuilder resultBuilder = new StringBuilder();
                foreach (RegionModel region in filteredRegions)
                {
                    resultBuilder.Append(htmlHelper.DxaRegion(region, containerSize));
                }

                return(new MvcHtmlString(resultBuilder.ToString()));
            }
        }
        private static RegionModel FindRegion(RegionModelSet regionModelSet, string regionName)
        {
            foreach (var region in regionModelSet)
            {
                if (region.Name.Equals(regionName))
                {
                    return(region);
                }
                RegionModel childRegion = FindRegion(region.Regions, regionName);
                if (childRegion != null)
                {
                    return(childRegion);
                }
            }

            return(null);
        }
Beispiel #3
0
        /// <summary>
        /// Renders a Region (of the current Page or Region Model) with a given name.
        /// </summary>
        /// <param name="htmlHelper">The HtmlHelper instance on which the extension method operates.</param>
        /// <param name="regionName">The name of the Region to render. This object determines the View that will be used.</param>
        /// <param name="emptyViewName">
        /// The name of the View to use when no Region with the given name is found in the Page Model (i.e. no Entities exist in the given Region).
        /// If <c>null</c> (the default) then nothing will be rendered in that case.
        /// If the View is not in the Core Area, the View name has to be in the format AreaName:ViewName.
        /// </param>
        /// <param name="containerSize">The size (in grid column units) of the containing element.</param>
        /// <returns>The rendered HTML or an empty string if no Region with a given name is found and <paramref name="emptyViewName"/> is <c>null</c>.</returns>
        /// <remarks>This method will throw an exception if the current Model does not represent a Page.</remarks>
        public static MvcHtmlString DxaRegion(this HtmlHelper htmlHelper, string regionName, string emptyViewName = null, int containerSize = 0)
        {
            using (new Tracer(htmlHelper, regionName, emptyViewName, containerSize))
            {
                RegionModelSet regions = GetRegions(htmlHelper.ViewData.Model);

                RegionModel region;
                if (!regions.TryGetValue(regionName, out region))
                {
                    if (emptyViewName == null)
                    {
                        Log.Debug("Region '{0}' not found and no empty View specified. Skipping.", regionName);
                        return(MvcHtmlString.Empty);
                    }
                    Log.Debug("Region '{0}' not found. Using empty View '{1}'.", regionName, emptyViewName);
                    region = new RegionModel(regionName, emptyViewName);
                }

                return(htmlHelper.DxaRegion(region, containerSize));
            }
        }
        /// <summary>
        /// Creates predefined Regions from Page Template metadata.
        /// </summary>
        private static void CreatePredefinedRegions(RegionModelSet regions, IPageTemplate pageTemplate)
        {
            IFieldSet ptMetadataFields = pageTemplate.MetadataFields;
            IField regionsField;
            if (ptMetadataFields == null || !ptMetadataFields.TryGetValue("regions", out regionsField)) // TODO: "region" instead of "regions"
            {
                Log.Debug("No Region metadata defined for Page Template '{0}'.", pageTemplate.Id);
                return;
            }

            foreach (IFieldSet regionMetadataFields in regionsField.EmbeddedValues)
            {
                IField regionViewNameField;
                if (!regionMetadataFields.TryGetValue("view", out regionViewNameField))
                {
                    Log.Warn("Region metadata without 'view' field encountered in metadata of Page Template '{0}'.", pageTemplate.Id);
                    continue;
                }

                MvcData regionMvcData = new MvcData(regionViewNameField.Value);
                InitializeRegionMvcData(regionMvcData);
                RegionModel regionModel = CreateRegionModel(regionMvcData);
                regions.Add(regionModel);
            }
        }