En vigtig tagline

45 6913 900113 90013 90034536

Vi optimerer dine indkøb -
Læs mere
Danmarks bredeste udvalg af barudstyr -
Læs mere
98,46% leveringssikkerhed -
Læs mere
Åbent i dag:
kl. 07:00 - 15:00

Kundeservice +45 6913 9001

Error executing template "Designs/Swift-v2/Paragraph/Swift-v2_MenuRelatedContent/Menu.cshtml"
System.ArgumentException: An item with the same key has already been added. Key: GROUP517
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at Dynamicweb.Ecommerce.Products.GroupService.GetSubgroups(Group group, Boolean showUnTranslated)
   at Dynamicweb.Ecommerce.Frontend.Navigation.GroupNavigationTreeNodeProvider.GetNodes(NavigationContext context, NavigationSettings settings, NavigationTreeNode parent)
   at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
   at System.Linq.Enumerable.SelectIterator[TSource,TResult](IEnumerable`1 source, Func`3 selector)+MoveNext()
   at CompiledRazorTemplates.Dynamic.RazorEngine_df9b1d5f90d6499385b82379a8362abc.ExecuteAsync()
   at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   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.Frontend.Navigation 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 5 @functions { 6 7 NavigationTreeViewModel GetNavigationTreeFromPageId(int pageId = 0, bool includeFolders = false, int startLevel = 1, int stopLevel = 9) 8 { 9 var navigationSettings = new NavigationSettings() 10 { 11 StartLevel = startLevel, 12 StopLevel = stopLevel, 13 RootPageId = pageId, 14 IncludeFoldersAndHidden = includeFolders, 15 ExpandMode = ExpandMode.All, 16 }; 17 18 return Navigation.GetNavigationViewModel(navigationSettings); 19 } 20 21 string GetGroupFieldValue(string fieldSystemName, NavigationTreeNodeViewModel node) 22 { 23 var productGroup = node.GetProductGroup(); 24 string fieldValue = string.Empty; 25 if (productGroup.GroupFields is not null) 26 { 27 foreach (var field in productGroup.GroupFields) 28 { 29 if (field.SystemName == fieldSystemName) 30 { 31 fieldValue = field.Value?.ToString() ?? string.Empty; 32 } 33 } 34 } 35 return fieldValue; 36 } 37 38 bool NavigationTreeHasChildren(NavigationTreeNodeViewModel rootNode) 39 { 40 foreach (var subNode in rootNode.Nodes) 41 { 42 if (subNode.Nodes.Any()) 43 { 44 return true; 45 } 46 } 47 return false; 48 } 49 50 int GetPageIdFromLink(string pageLink) 51 { 52 return !string.IsNullOrEmpty(pageLink) ? Convert.ToInt32(pageLink.Substring(pageLink.LastIndexOf('=') + 1)) : 0; 53 54 } 55 string GetSubmenuType(NavigationTreeNodeViewModel rootNode) 56 { 57 string submenuType = string.Empty; 58 var nodePage = Dynamicweb.Content.Services.Pages.GetPage(rootNode.PageId); 59 var pageType = !string.IsNullOrEmpty(nodePage.ItemType) ? nodePage.ItemType : "Swift-v2_Page"; 60 if (nodePage.PropertyItem is object && nodePage.PropertyItem.TryGetValue("SubmenuType", out object submenuTypeValue)) 61 { 62 submenuType = Dynamicweb.Core.Converter.ToString(submenuTypeValue); 63 } 64 return submenuType; 65 } 66 67 bool IsMegaMenu(NavigationTreeNodeViewModel rootNode, string submenuType) 68 { 69 switch (submenuType) 70 { 71 case "dropdown": 72 return false; 73 case "auto": 74 return NavigationTreeHasChildren(rootNode); 75 default: 76 return true; 77 } 78 } 79 80 string isActive(NavigationTreeNodeViewModel node) 81 { 82 return node.IsActive ? "aria-current='page'" : string.Empty; 83 } 84 85 string isActiveDropdown(NavigationTreeNodeViewModel node) 86 { 87 return node.IsActive ? "class=\"active\"" : string.Empty; 88 } 89 90 bool GetRelatedContentStructure(IEnumerable<NavigationTreeNodeViewModel> relatedContentNodes) 91 { 92 bool relatedContentIsNested = false; 93 94 foreach (var relatedContentNode in relatedContentNodes.Where(node => node.ShowInMenu)) 95 { 96 if (relatedContentNode.Nodes.Any()) 97 { 98 return relatedContentIsNested = true; 99 } 100 } 101 102 return relatedContentIsNested; 103 } 104 } 105 106 @{ 107 // Page settings 108 int navigationRootPageId = 0; 109 if (Model.Item.TryGetLink("NavigationRoot", out var link)) 110 { 111 navigationRootPageId = link.PageId; 112 } 113 var rootNavigation = GetNavigationTreeFromPageId(navigationRootPageId); 114 int maxEndNodes = 100; 115 if (Model.Item.TryGetString("MaxEndNodes", out var maxEndNodesValue)) 116 { 117 maxEndNodes = Dynamicweb.Core.Converter.ToInt32(maxEndNodesValue); 118 } 119 string maxEndNodesText = Model.Item.GetString("ShowAllLinkLabel"); 120 string clickable = "text-decoration-underline-hover text-decoration-accent-hover"; 121 } 122 123 <div class="nav-wrapper megamenu-wrapper" id="Menu_@Model.ID"> 124 <nav class="d-flex gap-2"> 125 @foreach (var rootNode in rootNavigation.Nodes.Where(node => node.ShowInMenu)) 126 { 127 string? relatedContentNavigationRoot = GetGroupFieldValue("ProductGroupRelatedContent", rootNode); 128 int relatedContentPageId = !string.IsNullOrEmpty(relatedContentNavigationRoot) ? GetPageIdFromLink(relatedContentNavigationRoot) : 0; 129 var relatedContentNodes = GetNavigationTreeFromPageId(relatedContentPageId, true).Nodes; 130 bool hasRelatedContent = relatedContentNodes.Any() && relatedContentPageId != 0; 131 bool relatedContentIsNested = hasRelatedContent ? GetRelatedContentStructure(relatedContentNodes) : false; 132 bool nodesExist = rootNode.Nodes.Any() || hasRelatedContent; 133 134 string submenuType = GetSubmenuType(rootNode); 135 bool isMegaMenu = IsMegaMenu(rootNode, submenuType); 136 string submenuTypeCss = isMegaMenu ? "position-static" : string.Empty; 137 string dropdown = nodesExist ? "dropdown" : string.Empty; 138 string dropdownAttributes = nodesExist ? "role=\"button\" data-bs-toggle=\"dropdown\" data-bs-offset=\"0,0\" aria-expanded=\"false\"" : string.Empty; 139 140 <div class="nav-item @dropdown @submenuTypeCss"> 141 @if (rootNode.IsClickable) 142 { 143 <a class="nav-link p-2 root-node" href="@rootNode.Link" @dropdownAttributes @isActive(rootNode)> 144 <span class="text-wrap-nowrap header-menu">@rootNode.Name</span> 145 </a> 146 } 147 else 148 { 149 <span class="nav-link p-2 root-node" role="button" @dropdownAttributes> 150 <span class="text-wrap-nowrap header-menu">@rootNode.Name</span> 151 </span> 152 } 153 154 @if (nodesExist) 155 { 156 if (isMegaMenu) 157 { 158 <div class="dropdown-menu border-0 megamenu border-bottom" data-dw-colorscheme="@Model.ColorScheme?.Id"> 159 <div data-swift-container class="overflow-y-auto"> 160 <div class="d-flex py-4 gap-4"> 161 162 @if (hasRelatedContent) 163 { 164 <div class="col-auto megamenu-col d-flex flex-column pe-4 border-end gap-3"> 165 @foreach (var relatedContentNode in relatedContentNodes.Where(node => node.ShowInMenu)) 166 { 167 <nav> 168 @if (relatedContentNode.IsClickable) 169 { 170 <a class="nav-link px-0 lh-1 pb-1 mb-1 @clickable" href="@relatedContentNode.Link" @isActive(relatedContentNode)> 171 <strong>@relatedContentNode.Name</strong> 172 </a> 173 } 174 else 175 { 176 <div class="nav-link px-0 lh-1 pb-1 mb-1 pe-none" @isActive(relatedContentNode)> 177 <strong>@relatedContentNode.Name</strong> 178 </div> 179 } 180 181 @foreach (var relatedContentSubNode in relatedContentNode.Nodes.Where(node => node.ShowInMenu)) 182 { 183 if (relatedContentSubNode.IsClickable) 184 { 185 <a class="nav-link px-0 lh-1 pb-1 @clickable" href="@relatedContentSubNode.Link" @isActive(relatedContentSubNode)> 186 <span>@relatedContentSubNode.Name</span> 187 </a> 188 } 189 else 190 { 191 <div class="nav-link px-0 lh-1 pb-1 pe-none"> 192 <span>@relatedContentSubNode.Name</span> 193 </div> 194 } 195 } 196 </nav> 197 } 198 </div> 199 200 } 201 202 <div class="col megamenu-grid d-grid gap-3"> 203 204 @foreach (var subNode in rootNode.Nodes.Where(node => node.ShowInMenu)) 205 { 206 <div class="megamenu-col"> 207 @if (subNode.IsClickable) 208 { 209 <a class="nav-link px-0 lh-1 pb-1 mb-1 @clickable header-large-paragraph" href="@subNode.Link" @isActive(subNode)> 210 @subNode.Name 211 </a> 212 } 213 else 214 { 215 <div class="nav-link px-0 lh-1 pb-1 mb-1 pe-none header-large-paragraph"> 216 @subNode.Name 217 </div> 218 } 219 220 @foreach (var (endNode, index) in subNode.Nodes.Select((node, i) => (node, i))) 221 { 222 if (index < maxEndNodes && endNode.ShowInMenu) 223 { 224 if (endNode.IsClickable) 225 { 226 <a class="nav-link px-0 lh-1 pb-1 @clickable header-medium-paragraph" href="@endNode.Link" @isActive(endNode)> 227 @endNode.Name 228 </a> 229 } 230 else 231 { 232 <div class="nav-link px-0 lh-1 pb-1 pe-none"> 233 @endNode.Name 234 </div> 235 } 236 237 continue; 238 } 239 240 if (!string.IsNullOrWhiteSpace(maxEndNodesText)) 241 { 242 <a class="nav-link px-0 text-decoration-underline mt-1 lh-1 header-medium-paragraph" href="@subNode.Link"> 243 @Translate(maxEndNodesText) 244 </a> 245 } 246 247 break; 248 } 249 </div> 250 251 } 252 </div> 253 </div> 254 </div> 255 </div> 256 } 257 else 258 { 259 <ul class="dropdown-menu dropdown-menu-shadow" data-dw-colorscheme="@Model.ColorScheme?.Id"> 260 261 @if (hasRelatedContent) 262 { 263 foreach (var relatedContentNode in relatedContentNodes) 264 { 265 if (relatedContentNode.IsClickable) 266 { 267 <li @isActiveDropdown(relatedContentNode)> 268 <a class="dropdown-item py-2 lh-1 @clickable" href="@relatedContentNode.Link" @isActive(relatedContentNode)> 269 <strong>@relatedContentNode.Name</strong> 270 </a> 271 </li> 272 } 273 else 274 { 275 <li> 276 <span class="dropdown-item py-2 lh-1 pe-none"> 277 <strong>@relatedContentNode.Name</strong> 278 </span> 279 </li> 280 281 } 282 283 foreach (var relatedContentSubNode in relatedContentNode.Nodes.Where(node => node.ShowInMenu)) 284 { 285 if (relatedContentSubNode.IsClickable) 286 { 287 <li @isActiveDropdown(relatedContentSubNode)> 288 <a class="dropdown-item py-2 lh-1 @clickable" href="@relatedContentSubNode.Link" @isActive(relatedContentSubNode)> 289 <strong>@relatedContentSubNode.Name</strong> 290 </a> 291 </li> 292 } 293 else 294 { 295 <li> 296 <span class="dropdown-item py-2 lh-1 pe-none"> 297 <strong>@relatedContentSubNode.Name</strong> 298 </span> 299 </li> 300 } 301 } 302 } 303 304 <li class="dropdown-divider"></li> 305 } 306 307 @foreach (var subNode in rootNode.Nodes.Where(node => node.ShowInMenu)) 308 { 309 if (subNode.IsClickable) 310 { 311 312 <li @isActiveDropdown(subNode)> 313 <a class="dropdown-item py-2 lh-1 @clickable" href="@subNode.Link" @isActive(subNode)> 314 <strong>@subNode.Name</strong> 315 </a> 316 </li> 317 } 318 else 319 { 320 <li> 321 <span class="dropdown-item py-2 lh-1 pe-none"> 322 <strong>@subNode.Name</strong> 323 </span> 324 </li> 325 } 326 } 327 </ul> 328 } 329 } 330 </div> 331 } 332 333 @{ 334 // Custom logic for checking if tobacco page should be added 335 var rootNodes = rootNavigation.Nodes.Where(node => node.ShowInMenu); 336 bool shouldAddTobaccoLink = !rootNodes.Any(n => n.GroupId == Custom.Assortments.Settings.Config.TobaccoGroupId); 337 var tobaccoPage = shouldAddTobaccoLink && Custom.Assortments.Settings.Config.TobaccoPageId > 0 338 ? Dynamicweb.Content.Services.Pages.GetPage(Custom.Assortments.Settings.Config.TobaccoPageId) 339 : null; 340 } 341 342 @* Tilføj custom tobacco link hvis det ikke findes i navigation *@ 343 @if (tobaccoPage != null) 344 { 345 <div class="nav-item position-static"> 346 <a class="nav-link p-2 root-node" href="/default.aspx?ID=@tobaccoPage.ID"> 347 <span class="text-wrap-nowrap header-menu">@tobaccoPage.MenuText</span> 348 </a> 349 </div> 350 } 351 </nav> 352 </div> 353 <script type="module"> 354 swift.Menu.setMenuContentOffset('Menu_@Model.ID'); 355 </script> 356
Sirup
Varenummer: 61316
1883 Syrup Mango
1883
Beskrivelse

Med 1883 Mangosirup kan du give en hvilken som helst drink eller cocktail et eksotisk pift med den inciterende duft og smag af mango.
1883 Mangosirup er sød og sommerlig med sin blomsterrige mangoduft og sin sødmefulde smag. Den passer sammen med de fleste typer alkohol, f.eks. i rom, vin, øl, cocktails og vodka.
Tilsæt også et strejf af Mangosiruppen til din æblejuice, og oplev hvordan de to smage klæder hinanden. Eller prøv den i din smoothie for at give den et ekstra pift af sol og sommer.

Nummer
61316
Oprindelsesland
FR
Kategori
ROUTIN1883
Underkategori Sirup & Mix
Sirup
Salgsenhed antal
1
Sukkerfri
No