/// <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); }
/// <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); } }