
7000 SERIES HEAVY DUTY CONCEALED MOUNT
7000 HDCM
Error executing template "Designs/Swift/Paragraph/Swift_ProductGroupList.cshtml" System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Dynamicweb.Ecommerce.Products.GroupRelation.GetGroupRelationsByChildId(String childId) at Dynamicweb.Ecommerce.Products.Group.get_IsTopGroup() at Dynamicweb.Ecommerce.Shops.Shop.GetTopLevelGroups(String languageId) at Dynamicweb.Ecommerce.Frontend.Navigation.GroupNavigationTreeNodeProvider.GetGroupsBySettings(PageNavigationSettings ecomSettings) at Dynamicweb.Ecommerce.Frontend.Navigation.GroupNavigationTreeNodeProvider.GetGroups(NavigationTreeNode parent, Page page) at Dynamicweb.Ecommerce.Frontend.Navigation.GroupNavigationTreeNodeProvider.GetNodes(NavigationContext context, NavigationSettings settings, NavigationTreeNode parent) at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) at CompiledRazorTemplates.Dynamic.RazorEngine_f78cdd0103b14fef8fab311c58c0ddad.Execute() in F:\Domains\Sites\uat-hager.mydwsite.com\Files\Templates\Designs\Swift\Paragraph\Swift_ProductGroupList.cshtml:line 16 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Rendering 3 @using Dynamicweb.Frontend.Navigation 4 @using Dynamicweb.Ecommerce.Products 5 @using Dynamicweb.Ecommerce.ProductCatalog 6 @using System.IO 7 8 @{ 9 var navigationSettings = new NavigationSettings(); 10 navigationSettings.StartLevel = 3; 11 navigationSettings.Parameters.Add("menu-id", "product-group-list"); 12 13 var navigationViewModel = Navigation.GetNavigationViewModel(navigationSettings); 14 } 15 16 @if (navigationViewModel.Nodes.Count() > 0) 17 { 18 if (Pageview.IsVisualEditorMode) 19 { 20 <div class="alert alert-dark m-0" role="alert"> 21 <span><i class="fas fa-info-circle mr-3"></i></span> <span>@Translate("Group list: The selected groups will be shown here, if any")</span> 22 </div> 23 }else{ 24 @GetNodes(navigationViewModel.Nodes) 25 } 26 } 27 else if (Pageview.IsVisualEditorMode) 28 { 29 <div class="alert alert-dark m-0" role="alert"> 30 <span><i class="fas fa-info-circle mr-3"></i></span> <span>@Translate("Group list: The selected groups will be shown here, if any")</span> 31 </div> 32 } 33 34 @helper GetNodes(IEnumerable<Dynamicweb.Frontend.Navigation.NavigationTreeNodeViewModel> nodes) 35 { 36 foreach (var node in nodes) 37 { 38 if (node.IsActive) 39 { 40 if (node.Nodes.Count() > 0) 41 { 42 @RenderNodes(node.Nodes) 43 } 44 } 45 else 46 { 47 if (node.Nodes.Count() > 0) 48 { 49 @GetNodes(node.Nodes) 50 } 51 } 52 } 53 } 54 55 @helper RenderNodes(IEnumerable<Dynamicweb.Frontend.Navigation.NavigationTreeNodeViewModel> nodes) 56 { 57 string layout = Model.Item.GetRawValueString("Layout", "text-bottom"); 58 59 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 60 string groupTheme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("GroupTheme")) ? " theme " + Model.Item.GetRawValueString("GroupTheme").Replace(" ", "").Trim().ToLower() : ""; 61 62 string horizontalAlignment = Model.Item.GetRawValueString("HorizontalAlignment", "start"); 63 64 switch (horizontalAlignment) 65 { 66 case "start": 67 horizontalAlignment = " justify-content-start"; 68 break; 69 case "center": 70 horizontalAlignment = " justify-content-center"; 71 break; 72 case "end": 73 horizontalAlignment = " justify-content-end"; 74 break; 75 } 76 77 string ratio = Model.Item.GetRawValueString("ImageAspectRatio", "0"); 78 string ratioCssClass = ratio != "0" ? " ratio" : string.Empty; 79 string ratioVariable = ratio != "0" ? "style=\"--bs-aspect-ratio: " + ratio + "\"" : string.Empty; 80 81 int groupsCount = 0; 82 83 foreach (var node in nodes) 84 { 85 IList<FieldValueViewModel> groupFields = node.GetProductGroup().GroupFields; 86 87 if (groupFields != null) 88 { 89 foreach (FieldValueViewModel field in groupFields) 90 { 91 if (field.SystemName == "SelectedGroup" && !string.IsNullOrEmpty(field.Value.ToString())) 92 { 93 if (Convert.ToBoolean(field.Value.ToString())) 94 { 95 groupsCount++; 96 } 97 } 98 } 99 } 100 } 101 102 if (groupsCount != 0) 103 { 104 string paddingClass = !string.IsNullOrEmpty(theme) ? " p-3" : " pb-2 pb-lg-0"; 105 106 if (layout != "pill-button") 107 { 108 109 <nav class="swiffy-slider slider-item-reveal slider-item-nosnap slider-item-show6 slider-nav-round@(paddingClass)@(theme)" style="--swiffy-slider-item-count: 10;" aria-label="@Translate("Product groups")"> 110 <ul class="slider-container @horizontalAlignment"> 111 @foreach (var node in nodes) 112 { 113 string groupImage = ""; 114 var group = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(node.GroupId); 115 IList<FieldValueViewModel> groupFields = node.GetProductGroup().GroupFields; 116 117 if (!string.IsNullOrEmpty(node.GroupId)) 118 { 119 groupImage = !string.IsNullOrEmpty(group.LargeImage) ? "/Files" + group.LargeImage : groupImage; 120 } 121 122 bool showGroup = false; 123 124 if (groupFields != null) 125 { 126 foreach (FieldValueViewModel field in groupFields) 127 { 128 if (field.SystemName == "SelectedGroup" && !string.IsNullOrEmpty(field.Value.ToString())) 129 { 130 if (Convert.ToBoolean(field.Value.ToString())) 131 { 132 showGroup = true; 133 } 134 } 135 } 136 } 137 138 if (showGroup) 139 { 140 string imageRoundedPill = layout == "ball" ? " rounded-pill" : string.Empty; 141 142 <li class="@groupTheme@(string.IsNullOrWhiteSpace(groupImage) && (layout == "ball") ? imageRoundedPill + " overflow-hidden": string.Empty)"> 143 <a href="@node.Link" tabindex="-1" class="text-decoration-none"> 144 145 @if (layout == "text-bottom" || layout == "ball") 146 { 147 148 <div class="d-flex flex-column justify-content-center align-items-center h-100"> 149 @if (!string.IsNullOrWhiteSpace(groupImage)) 150 { 151 152 <div class="@ratioCssClass" @ratioVariable> 153 <img loading="lazy" src="/Admin/Public/GetImage.ashx?width=640&crop=0&image=@groupImage" class="overflow-hidden@(imageRoundedPill) img-fluid image-zoom-lg-2-hover" style="object-fit: cover" alt="@node.Name"> 154 </div> 155 } 156 157 <div class="@(ratioCssClass)" @ratioVariable> 158 <div class="d-flex flex-column align-items-center justify-content-center fs-7 text-center p-2"> 159 @node.Name 160 </div> 161 </div> 162 </div> 163 } 164 165 @if (layout == "poster") 166 { 167 <div class="d-flex flex-column justify-content-center align-items-center h-100 position-relative"> 168 @if (!string.IsNullOrWhiteSpace(groupImage)) 169 { 170 <div class="@(ratioCssClass)" @ratioVariable> 171 <img loading="lazy" src="/Admin/Public/GetImage.ashx?width=640&crop=0&image=@groupImage" class="img-fluid image-zoom-lg-2-hover" style="object-fit: cover" alt="@node.Name"> 172 </div> 173 <div class="position-absolute text-center fs-5"> 174 @node.Name 175 </div> 176 } 177 else 178 { 179 <div class="@(ratioCssClass)" @ratioVariable> 180 <div class="d-flex flex-column align-items-center justify-content-center text-center fs-5 p-2"> 181 @node.Name 182 </div> 183 </div> 184 } 185 </div> 186 } 187 </a> 188 </li> 189 } 190 } 191 </ul> 192 193 194 @if (groupsCount > 10) 195 { 196 <button type="button" title="Slide to previous" class="slider-nav"></button> 197 <button type="button" title="Slide to next" class="slider-nav slider-nav-next"></button> 198 } 199 200 <script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> 201 <script type="module"> 202 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 203 document.addEventListener('load.swift.assetloader', function () { 204 swiffyslider.init() 205 }); 206 </script> 207 </nav> 208 } 209 else 210 { 211 <nav class="d-flex flex-wrap gap-3 align-items-center @horizontalAlignment overflow-x-auto@(paddingClass)@(theme)" aria-label="@Translate("Product groups")"> 212 @foreach (var node in nodes) 213 { 214 string groupImage = ""; 215 IList<FieldValueViewModel> groupFields = node.GetProductGroup().GroupFields; 216 217 if (layout == "pill-button" && groupFields != null) 218 { 219 foreach (FieldValueViewModel field in groupFields) 220 { 221 if (field.SystemName == "ProductGroupNavigationImage" && !string.IsNullOrEmpty(field.Value.ToString())) 222 { 223 groupImage = "/Files/Images/" + field.Value.ToString(); 224 } 225 } 226 } 227 228 bool showGroup = false; 229 if (groupFields != null) 230 { 231 foreach (FieldValueViewModel field in groupFields) 232 { 233 if (field.SystemName == "SelectedGroup" && !string.IsNullOrEmpty(field.Value.ToString())) 234 { 235 if (Convert.ToBoolean(field.Value.ToString())) 236 { 237 showGroup = true; 238 } 239 } 240 } 241 } 242 243 if (showGroup) 244 { 245 <a href="@node.Link" tabindex="-1" class="btn btn-secondary rounded-pill @(@groupTheme)"> 246 <div class="d-flex flex-row align-items-center"> 247 @if (!string.IsNullOrWhiteSpace(groupImage)) 248 { 249 if (Path.GetExtension(groupImage).ToLower() == ".svg") 250 { 251 <div class="icon-3 me-2" style="width: 35px"> 252 @ReadFile(groupImage) 253 </div> 254 } 255 else 256 { 257 <div class="me-3" style="width: 35px"> 258 <div class="@ratioCssClass" @(ratioVariable)> 259 <img loading="lazy" src="/Admin/Public/GetImage.ashx?width=35&crop=0&image=@groupImage" style="object-fit: cover" alt=""> 260 </div> 261 </div> 262 } 263 } 264 <div class="fs-7 text-center text-nowrap"> 265 @node.Name 266 </div> 267 </div> 268 </a> 269 } 270 } 271 </nav> 272 } 273 } 274 } 275 276 277