Choinki i ozdobna zieleń

Dalgas może być Twoim partnerem, niezależnie od tego, czy szukasz choinek i ozdób świątecznych, sprzętu do produkcji choinek, czy chcesz zostać dostawcą choinek dla jednej z największych zielonych firm w Danii. Dzięki silnym certyfikatom i naturze jako partnerowi – jesteśmy z Tobą na każdym kroku.

Święta dla wszystkich: Wysokiej jakości choinki dla całej Europy

Wybór wysokiej jakości choinek z naszej odpowiedzialnej produkcji zapewnia, że nie tylko tworzysz idealną atmosferę świąteczną, ale także pozostawiasz minimalny ślad w przyrodzie i środowisku. Szacunek i troska o naturę są podstawą naszej pracy z choinkami. 

Dalgas jest z Tobą od momentu zbioru wysokiej jakości nasion na zboczach gór w Gruzji, aż po ścięcie i sprzedaż gotowej choinki, gotowej do dekoracji i podziwiania. W ten sposób masz pewność, że otrzymujesz produkt wysokiej jakości, za który zarówno my, jak i Ty możemy ręczyć – od nasiona do świętowania.

Pomagamy ci na każdym kroku

Szeroka gama usług i rozwiązań w zakresie choinek i ozdób świątecznych.

Twój dostawca na święta

Dalgas współpracuje z naturą, gdy starannie wybieramy drzewa na podstawie naszych wysokich standardów jakości i odpowiedzialności. To zapewnia Ci choinkę, z której możesz być dumny, sprzedając ją w swoim sklepie.

Pokaż więcej

Certyfikaty

Certyfikacja z GlobalG.A.P., GRASP, Label Rouge i Naturbaumsiegel zapewnia, że nasza produkcja choinek odbywa się z uwzględnieniem natury, środowiska oraz bezpiecznych i zdrowych warunków pracy.

Pokaż więcej

Logistyka

Z Dalgas jako Twoim dostawcą możesz być pewien, że każde drzewo jest starannie wybierane, dokumentowane i ma wysoką niezawodność dostaw, co przynosi korzyści zarówno Tobie, jak i Twoim klientom.

Pokaż więcej

Twoje osoby kontaktowe

Mikkel Vagn Kristensen

Key Account Manager Oddział: Christmas trees Biuro: Aarhus
T. +45 40280380

Zbigniew Jozefowicz

Polish agent Oddział: Christmas trees
T. 0048 507 937 508

Czy chciałbyś żebyśmy się z Tobą skontaktowali?

Naciśnij przycisk i wypełnij formularz - skontaktujemy się z Tobą tak szybko, jak to możliwe.
Przesyłając formularz, wyrażasz zgodę na przetwarzanie przez Hedeselskabet, VAT DK 42344613 i jego spółki zależne, Twoich danych osobowych zgodnie z polityką prywatności Hedeselskabet.
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Featured_Lists.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 Dalgas.Custom.Services.ContentRelationService.GetRelatedPagesByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in C:\Data\Development\git\Dalgas-hs\Custom\Services\ContentRelationService.cs:line 81
   at Dalgas.Custom.Services.ContentRelationService.GetRelatedServicesByCurrentPage(Int32 pageSize) in C:\Data\Development\git\Dalgas-hs\Custom\Services\ContentRelationService.cs:line 304
   at CompiledRazorTemplates.Dynamic.RazorEngine_354ffdc315a844e6946bf9c27098725b.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Featured_Lists.cshtml:line 251
   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.GridRowViewModel> 2 @using System 3 @using System.Collections.Generic 4 @using System.Linq 5 @using System.Text.RegularExpressions 6 @using Dalgas.Custom.Models.Content 7 @using Dalgas.Custom.Services 8 @using Dalgas.Custom.ViewModels.UI 9 @using Dynamicweb.Content 10 @using Dynamicweb.Core.Encoders 11 @using Dynamicweb.Frontend 12 @using Dynamicweb.Ecommerce.ProductCatalog 13 @using Page = Dynamicweb.Content.Page 14 @using System 15 @using System.Collections.Generic 16 @using System.Linq 17 @using Dalgas.Custom.ViewModels.UI 18 @using Dynamicweb.Content 19 @using Dynamicweb.Ecommerce.ProductCatalog 20 @using Dynamicweb.Frontend 21 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 22 23 @*TODO: Move these functions onto the model *@ 24 25 @functions 26 { 27 28 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 29 { 30 var returnValues = new List<string> 31 { 32 $"item_{model.Item.SystemName.ToLower()}" 33 }; 34 35 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 36 { 37 returnValues.Add("dalgas-section-first-on-page"); 38 } 39 40 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 41 42 if (!string.IsNullOrEmpty(overwriteTheme)) 43 { 44 sectionBackgroundTheme = overwriteTheme; 45 } 46 47 // Add theme class if it exists 48 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 49 { 50 if (sectionBackgroundTheme.Contains("default")) 51 { 52 returnValues.Add("theme theme-light"); 53 } 54 else 55 { 56 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 57 } 58 } 59 60 // Determine if top padding should be removed 61 62 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 63 64 returnValues.Add("pb-6"); 65 if (removeTopPadding != "enable") 66 { 67 returnValues.Add("pt-6"); 68 } 69 70 return string.Join(" ", returnValues); 71 } 72 73 } 74 75 76 @{ 77 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 78 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 79 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 80 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 81 82 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 83 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 84 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 85 bool hasHeading = headings.Any(); 86 bool hasButton = buttons.Any(); 87 88 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 89 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 90 91 var sectionClassList = GetSectionClassList(Model); 92 93 var image = string.Empty; 94 var imageParameters = new Dictionary<string, object>(); 95 96 string layout = string.Empty; 97 Boolean enableFifthElement = false; 98 if (Model?.Item != null) 99 { 100 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 101 102 if (paragraphLayout != null) 103 { 104 layout = paragraphLayout.GetString("Layout"); 105 106 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 107 } 108 } 109 110 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 111 { 112 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 113 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 114 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 115 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 116 string cssPosition = $"{xPos}% {yPos}%"; 117 imageParameters.Add("style", "object-position:" + cssPosition); 118 } 119 120 LinkViewModel imageLink = new LinkViewModel(); 121 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 122 { 123 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 124 } 125 126 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 127 } 128 129 130 @{ 131 ClassList rowWidthClasslist = new ClassList("col-12"); 132 ClassList colClasslist = new ClassList("js-content-container content-container col-12 mb-4 dalgas-list-card"); 133 ClassList cardClasslist = new ClassList("pt-3"); 134 string imageAspectRatio = string.Empty; 135 string newsModolusClasslist = string.Empty; 136 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 137 138 FileViewModel featuredListImage = new FileViewModel(); 139 List<FileViewModel> imageList = new List<FileViewModel>(); // List to hold images for the modal 140 IList<ItemViewModel> featureListItems = Model.Item?.GetItem("Content")?.GetItems("PageSelector") ?? Enumerable.Empty<ItemViewModel>().ToList(); 141 bool hasFeatureListItems = featureListItems.Any(); 142 143 int.TryParse(Dynamicweb.Context.Current.Request["PageSize"], out int pageSize); 144 string showAllUrl = $"{Pageview.SearchFriendlyUrl}?PageSize=999"; 145 146 bool showAll = Model.Item.GetItem("Content").GetBoolean("ShowAll"); 147 bool showFacets = Model.Item.GetItem("Content").GetBoolean("ShowFacets"); 148 bool showSearch = Model.Item.GetItem("Content").GetBoolean("ShowSearch"); 149 bool allowAllQueryItems = showFacets || showSearch; 150 showAll = allowAllQueryItems || showAll; 151 int numberOfItemsToShow = 999; 152 int rowsPerPage = 3; 153 154 155 List<FacetOption> selectedFacetOptions = new List<FacetOption>(); 156 if (hasFeatureListItems) 157 { 158 allowAllQueryItems = false; 159 } 160 161 QueryResult queryResult = new QueryResult(); 162 string contentType = Model.Item.GetItem("Content").GetString("FeatureOptions"); 163 int totaleCount = 0; 164 165 switch (contentType) 166 { 167 case "articles": 168 numberOfItemsToShow = 4; 169 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 170 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 171 172 if (!hasFeatureListItems) 173 { 174 queryResult = showAll ? ContentRelationService.Instance.GetAllKnowledge(numberOfItemsToShow) : ContentRelationService.Instance.GetKnowledgeByCurrentPage(numberOfItemsToShow); 175 } 176 177 imageAspectRatio = "ratio-4x3"; 178 colClasslist.Add("col-md-3"); 179 break; 180 case "events": 181 numberOfItemsToShow = 3; 182 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 183 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 184 if (!hasFeatureListItems) 185 { 186 queryResult = showAll ? ContentRelationService.Instance.GetAllEvents(numberOfItemsToShow) : ContentRelationService.Instance.GetEventsByCurrentPage(numberOfItemsToShow); 187 } 188 189 imageAspectRatio = "ratio-16x9"; 190 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 191 colClasslist.Add("col-md-4 d-flex flex-column"); 192 break; 193 case "cases": 194 numberOfItemsToShow = 3; 195 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 196 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 197 if (!hasFeatureListItems) 198 { 199 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 200 { 201 queryResult = ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentFunding(numberOfItemsToShow); 202 } 203 else 204 { 205 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseCustomerStoriesByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(numberOfItemsToShow); 206 } 207 } 208 209 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 210 imageAspectRatio = "ratio-16x9"; 211 colClasslist.Add("col-md-4 d-flex flex-column"); 212 break; 213 case "news": 214 numberOfItemsToShow = 3; 215 numberOfItemsToShow = showAll ? numberOfItemsToShow * (rowsPerPage * 2) : numberOfItemsToShow; 216 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 217 if (!hasFeatureListItems) 218 { 219 queryResult = showAll ? ContentRelationService.Instance.GetAllNews(numberOfItemsToShow) : ContentRelationService.Instance.GetNewsByCurrentPage(numberOfItemsToShow); 220 } 221 222 rowWidthClasslist.Add("col-lg-11 ms-auto"); 223 colClasslist.Add("mb-5"); 224 break; 225 case "projects": 226 numberOfItemsToShow = 3; 227 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 228 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 229 if (!hasFeatureListItems) 230 { 231 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 232 { 233 queryResult = ContentRelationService.Instance.GetCaseProjectsByCurrentFunding(numberOfItemsToShow); 234 } 235 else 236 { 237 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseProjectsByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseProjectsByCurrentPage(numberOfItemsToShow); 238 } 239 } 240 241 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 242 imageAspectRatio = "ratio-16x9"; 243 colClasslist.Add("col-md-4 d-flex flex-column"); 244 break; 245 case "related-services": 246 numberOfItemsToShow = 6; 247 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 248 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 249 if (!hasFeatureListItems) 250 { 251 queryResult = ContentRelationService.Instance.GetRelatedServicesByCurrentPage(numberOfItemsToShow); 252 } 253 254 cardClasslist.Add("theme theme-mud p-4 pt-5 h-100"); 255 imageAspectRatio = "ratio-16x9"; 256 colClasslist.Add("col-md-4 d-flex flex-column"); 257 break; 258 } 259 260 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int result) ? result : 1; 261 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 262 263 List<string> pageIds = new List<string>(); 264 if (hasFeatureListItems) 265 { 266 pageIds.AddRange(featureListItems.Select(fli => fli.Fields.FirstOrDefault(f => f.Name == "Page")?.GetLink().PageId.ToString())); 267 } 268 else if (queryResult.Results.Any()) 269 { 270 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 271 } 272 273 string strTitle = string.Empty; 274 string strLink = string.Empty; 275 string strSummary = string.Empty; 276 string strImage = string.Empty; 277 string strType = string.Empty; 278 string badgeTheme = string.Empty; 279 DateTime strDate = new DateTime(); 280 } 281 282 @if ((queryResult.FacetGroups.Any() && allowAllQueryItems) || (queryResult.Results.Any() && !allowAllQueryItems) || featureListItems.Any()) 283 { 284 int loopCounter = 1; // Initialize loop counter for each group 285 286 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 287 <div class="container-xl"> 288 <div class="row justify-content-center"> 289 <div class="@rowWidthClasslist"> 290 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" 291 id="@($"query-result-{Model.Id}")"> 292 293 @if (hasLead || hasText || hasHeading) 294 { 295 <div class="js-content-container content-container col-12 mb-3"> 296 297 <div class="col-lg-6"> 298 <span> 299 @string.Join("", headings.Select(h => h.ToString())) 300 </span> 301 302 @if (!string.IsNullOrEmpty(lead)) 303 { 304 <p class="lead">@lead</p> 305 } 306 307 @text 308 309 </div> 310 </div> 311 } 312 313 @{ 314 ButtonViewModel btnViewResult = new ButtonViewModel 315 { 316 Text = Translate("View more"), 317 Type = ButtonType.Link, 318 DisplayType = ButtonDisplayType.Link 319 }; 320 321 if (showAll) 322 { 323 totaleCount = queryResult.TotalCount; 324 } 325 326 <a href="@showAllUrl" class="d-none">show all</a> 327 <form method="post" action="@Pageview.SearchFriendlyUrl" 328 data-response-target-element="content" tabindex="-1" aria-hidden="false" 329 class="d-flex js-dalgas-facets-form dalgas-facets-form" 330 data-total-count="@totaleCount" data-page-size="@numberOfItemsToShow"> 331 <input type="hidden" name="LayoutTemplate" 332 value="Designs/Swift/Swift_PageClean.cshtml"/> 333 <input type="hidden" name="PageNum" value="@pageNum"/> 334 <input type="hidden" name="PageSize" value="@numberOfItemsToShow"/> 335 @if (allowAllQueryItems) 336 { 337 if (showFacets) 338 { 339 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 340 { 341 foreach (Facet facet in facetGroup.Facets) 342 { 343 string showClass = " show"; 344 string ariaExpanded = "true"; 345 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty, RegexOptions.None, TimeSpan.FromMilliseconds(5000)); 346 347 348 if (facet.Options.Any()) 349 { 350 int selectedFacetsInGroup = 0; 351 352 foreach (FacetOption option in facet.Options) 353 { 354 if (option.Selected) 355 { 356 selectedFacetsInGroup++; 357 } 358 } 359 360 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 361 362 <div class="dropdown js-facets-selector"> 363 <button class="btn dropdown-toggle" type="button" 364 id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" 365 aria-expanded="false"> 366 @label 367 </button> 368 <div data-lenis-prevent class="dropdown-menu p-3" 369 aria-labelledby="FacetGroup_@facetGroupId" 370 style="min-width: 280px"> 371 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 372 { 373 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 374 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 375 string selected = facetOption.Selected ? "checked" : string.Empty; 376 string facetValue = Uri.UnescapeDataString(facetOption.Value); 377 string optionValue = $"[{facetValue}]"; 378 379 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 380 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 381 382 <label class="form-check mt-1" @disabled> 383 <input type="checkbox" 384 onclick="custom.QueryResult.update(event)" 385 class="form-check-input" 386 name="@facet.QueryParameter" 387 value="@optionValue" 388 data-filter-value="@facetLabel" @selected> 389 <span 390 class="form-check-label d-flex align-items-center"> 391 <span class="flex-fill">@facetLabel </span> 392 <small 393 class="opacity-85">@facetOption.Count</small> 394 </span> 395 </label> 396 397 if (facetOption.Selected) 398 { 399 FacetOption selectFacetOption = facetOption; 400 selectFacetOption.Name = facet.QueryParameter; 401 selectedFacetOptions.Add(selectFacetOption); 402 } 403 } 404 </div> 405 </div> 406 } 407 } 408 } 409 410 if (!string.IsNullOrEmpty(searchTerm)) 411 { 412 selectedFacetOptions.Add(new FacetOption() 413 { 414 Count = 1, 415 Label = searchTerm, 416 Name = "q", 417 Selected = true, 418 Value = searchTerm 419 }); 420 } 421 } 422 423 if (showSearch) 424 { 425 <div class="type-ahead-dropdown"> 426 <div class="position-relative suggest-form"> 427 <span 428 class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 429 @ReadFile(iconPath + "search.svg") 430 </span> 431 432 <input id="searchField_@Model.Id" 433 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 434 type="search" 435 placeholder="@Translate("Search here")" 436 autocomplete="off" 437 maxlength="255" 438 name="q" 439 value="@searchTerm" 440 data-original="@searchTerm"> 441 442 <button type="button" 443 onclick="custom.QueryResult.clearSearchField(event)" 444 class="btn h-100 icon-2 reset-search" 445 aria-label="@Translate("Clear search")" 446 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 447 @ReadFile(iconPath + "x.svg") 448 </button> 449 </div> 450 </div> 451 <input type="submit" onclick="custom.QueryResult.update(event)" 452 class="btn btn-primary" value="@Translate("Search", "Search")"> 453 } 454 } 455 </form> 456 457 if (showFacets && selectedFacetOptions.Any()) 458 { 459 <div 460 class="js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container mt-3"> 461 @foreach (FacetOption facetOption in selectedFacetOptions) 462 { 463 string facetValue = Uri.UnescapeDataString(facetOption.Value); 464 string optionValue = $"[{facetValue}]"; 465 <input class="visually-hidden" 466 id="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)" 467 name="@facetOption.Name" 468 onclick="custom.QueryResult.deselectFacetOption(event)" type="checkbox" 469 value="@optionValue" title="@facetOption.Label" checked> 470 <label class="badge theme border border-dark text-nowrap" 471 for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 472 <span class="text-nowrap">@(facetOption.Label)</span> 473 <span class="icon-2 ms-2"> 474 @ReadFile(iconPath + "x.svg") 475 </span> 476 </label> 477 } 478 479 @if (selectedFacetOptions.Count >= 3) 480 { 481 <input class="visually-hidden" id="ClearAll" name="ClearAll" 482 onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" 483 title="" checked> 484 <label class="badge theme border border-dark dalgas-btn-clear-all" 485 for="ClearAll"> 486 <span class="text-nowrap">@Translate("Clear all")</span> 487 <span class="icon-2 ms-2"> 488 @ReadFile(iconPath + "x.svg") 489 </span> 490 </label> 491 } 492 </div> 493 }} 494 495 @if (pageIds.Any() == false) 496 { 497 <div class="mt-4">@Translate("Your search returned no results...")</div> 498 } 499 500 <div 501 class="row @(!showAll ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 502 @foreach (string pageId in pageIds) 503 { 504 if (!int.TryParse(pageId, out int intPageId)) 505 { 506 continue; 507 } 508 509 Page page = Services.Pages.GetPage(intPageId); 510 511 if (page == null) 512 { 513 continue; 514 } 515 516 strTitle = page.Item["Title"]?.ToString(); 517 strSummary = page.Item["Summary"]?.ToString(); 518 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 519 btnViewResult.Id = "pageId_" + page.ID; 520 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 521 if (page.Item["Date"] != null) 522 { 523 strDate = (DateTime) page.Item["Date"]; 524 } 525 526 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 527 if (jpgIndex != -1) 528 { 529 strImage = strImage.Substring(0, jpgIndex + 4); 530 } 531 532 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 533 imageList.Add(featuredListImage); 534 535 if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 536 { 537 badgeTheme = ""; 538 if (loopCounter % 6 == 2 || loopCounter % 6 == 4) 539 { 540 newsModolusClasslist = "col-lg-5"; 541 imageAspectRatio = "ratio-16x9"; 542 if (showAll) 543 { 544 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 545 } 546 } 547 else 548 { 549 newsModolusClasslist = "col-lg-3"; 550 imageAspectRatio = "ratio-16x9 ratio-lg-3x4"; 551 if (showAll) 552 { 553 imageAspectRatio = "ratio-3x4"; 554 } 555 } 556 557 loopCounter++; 558 } 559 560 561 <div class="@colClasslist @newsModolusClasslist"> 562 563 @if (!string.IsNullOrEmpty(featuredListImage.Path)) 564 { 565 <a href="@btnViewResult.Url"> 566 <figure class="ratio @imageAspectRatio mb-0"> 567 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 568 </figure> 569 </a> 570 } 571 572 <div class="@cardClasslist"> 573 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events") 574 { 575 badgeTheme = "mb-5"; 576 } 577 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 578 { 579 if (strDate != null) 580 { 581 var date = strDate; 582 var formattedDate = date.ToLongDateString(); 583 if (date.TimeOfDay.ToString() != "00:00:00") 584 { 585 formattedDate = formattedDate + " - " + date.ToShortTimeString(); 586 } 587 588 <div class="badge mb-3 @badgeTheme"> 589 @formattedDate 590 </div> 591 } 592 } 593 594 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "cases" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "projects") 595 { 596 var selectedValues = page.Item["Type"].ToString(); 597 <div class="badge mb-5 mr-3 @badgeTheme"> 598 @ContentService.Instance.GetLabelForCaseType(selectedValues) 599 </div> 600 } 601 602 @{ 603 var badgeParms = new Dictionary<string, object>(); 604 badgeParms.Add("pageId", page.ID); 605 } 606 @RenderPartial("UserInterfaceModels/badge.cshtml", Model, badgeParms) 607 608 <h4> 609 <a href="@btnViewResult.Url" class="text-decoration-none"> 610 @strTitle 611 </a> 612 </h4> 613 @if (strSummary != null) 614 { 615 <span class="small">@strSummary</span> 616 } 617 618 <div class="mt-2"> 619 @RenderModel(btnViewResult) 620 </div> 621 </div> 622 </div> 623 } 624 </div> 625 626 @if (showAll && totaleCount > numberOfItemsToShow) 627 { 628 <div class="row"> 629 <div class="col-12 text-center"> 630 <button onclick="custom.QueryResult.getNextPage(event)" 631 class="btn btn-primary">@Translate("Vis flere")</button> 632 </div> 633 </div> 634 } 635 636 @if (hasButton) 637 { 638 <div class="js-content-container content-container col-12"> 639 640 <div class="d-flex flex-wrap gap-3"> 641 @foreach (ButtonViewModel button in buttons) 642 { 643 @button 644 } 645 </div> 646 647 </div> 648 } 649 650 </div> 651 </div> 652 </div> 653 </div> 654 @if (enableFifthElement) 655 { 656 <div class="fifth-element-section-container"> 657 <div class="fifth-element size-2 bottom-0 ob-50 right-0 @fifthElementTheme"> 658 @ReadFile(fifthElementIconPath + "sun.svg") 659 </div> 660 </div> 661 } 662 </section> 663 } 664 else 665 { 666 if (Pageview.IsVisualEditorMode) 667 { 668 <div class="container-xl alert alert-danger" role="alert"> 669 This <strong>@Model.Item.SystemName</strong> is empty 670 </div> 671 } 672 } 673
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Featured_Lists.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 Dalgas.Custom.Services.ContentRelationService.GetRelatedPagesByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in C:\Data\Development\git\Dalgas-hs\Custom\Services\ContentRelationService.cs:line 81
   at Dalgas.Custom.Services.ContentRelationService.GetKnowledgeByCurrentPage(Int32 pageSize) in C:\Data\Development\git\Dalgas-hs\Custom\Services\ContentRelationService.cs:line 735
   at CompiledRazorTemplates.Dynamic.RazorEngine_354ffdc315a844e6946bf9c27098725b.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Featured_Lists.cshtml:line 174
   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.GridRowViewModel> 2 @using System 3 @using System.Collections.Generic 4 @using System.Linq 5 @using System.Text.RegularExpressions 6 @using Dalgas.Custom.Models.Content 7 @using Dalgas.Custom.Services 8 @using Dalgas.Custom.ViewModels.UI 9 @using Dynamicweb.Content 10 @using Dynamicweb.Core.Encoders 11 @using Dynamicweb.Frontend 12 @using Dynamicweb.Ecommerce.ProductCatalog 13 @using Page = Dynamicweb.Content.Page 14 @using System 15 @using System.Collections.Generic 16 @using System.Linq 17 @using Dalgas.Custom.ViewModels.UI 18 @using Dynamicweb.Content 19 @using Dynamicweb.Ecommerce.ProductCatalog 20 @using Dynamicweb.Frontend 21 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 22 23 @*TODO: Move these functions onto the model *@ 24 25 @functions 26 { 27 28 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 29 { 30 var returnValues = new List<string> 31 { 32 $"item_{model.Item.SystemName.ToLower()}" 33 }; 34 35 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 36 { 37 returnValues.Add("dalgas-section-first-on-page"); 38 } 39 40 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 41 42 if (!string.IsNullOrEmpty(overwriteTheme)) 43 { 44 sectionBackgroundTheme = overwriteTheme; 45 } 46 47 // Add theme class if it exists 48 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 49 { 50 if (sectionBackgroundTheme.Contains("default")) 51 { 52 returnValues.Add("theme theme-light"); 53 } 54 else 55 { 56 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 57 } 58 } 59 60 // Determine if top padding should be removed 61 62 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 63 64 returnValues.Add("pb-6"); 65 if (removeTopPadding != "enable") 66 { 67 returnValues.Add("pt-6"); 68 } 69 70 return string.Join(" ", returnValues); 71 } 72 73 } 74 75 76 @{ 77 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 78 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 79 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 80 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 81 82 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 83 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 84 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 85 bool hasHeading = headings.Any(); 86 bool hasButton = buttons.Any(); 87 88 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 89 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 90 91 var sectionClassList = GetSectionClassList(Model); 92 93 var image = string.Empty; 94 var imageParameters = new Dictionary<string, object>(); 95 96 string layout = string.Empty; 97 Boolean enableFifthElement = false; 98 if (Model?.Item != null) 99 { 100 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 101 102 if (paragraphLayout != null) 103 { 104 layout = paragraphLayout.GetString("Layout"); 105 106 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 107 } 108 } 109 110 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 111 { 112 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 113 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 114 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 115 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 116 string cssPosition = $"{xPos}% {yPos}%"; 117 imageParameters.Add("style", "object-position:" + cssPosition); 118 } 119 120 LinkViewModel imageLink = new LinkViewModel(); 121 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 122 { 123 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 124 } 125 126 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 127 } 128 129 130 @{ 131 ClassList rowWidthClasslist = new ClassList("col-12"); 132 ClassList colClasslist = new ClassList("js-content-container content-container col-12 mb-4 dalgas-list-card"); 133 ClassList cardClasslist = new ClassList("pt-3"); 134 string imageAspectRatio = string.Empty; 135 string newsModolusClasslist = string.Empty; 136 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 137 138 FileViewModel featuredListImage = new FileViewModel(); 139 List<FileViewModel> imageList = new List<FileViewModel>(); // List to hold images for the modal 140 IList<ItemViewModel> featureListItems = Model.Item?.GetItem("Content")?.GetItems("PageSelector") ?? Enumerable.Empty<ItemViewModel>().ToList(); 141 bool hasFeatureListItems = featureListItems.Any(); 142 143 int.TryParse(Dynamicweb.Context.Current.Request["PageSize"], out int pageSize); 144 string showAllUrl = $"{Pageview.SearchFriendlyUrl}?PageSize=999"; 145 146 bool showAll = Model.Item.GetItem("Content").GetBoolean("ShowAll"); 147 bool showFacets = Model.Item.GetItem("Content").GetBoolean("ShowFacets"); 148 bool showSearch = Model.Item.GetItem("Content").GetBoolean("ShowSearch"); 149 bool allowAllQueryItems = showFacets || showSearch; 150 showAll = allowAllQueryItems || showAll; 151 int numberOfItemsToShow = 999; 152 int rowsPerPage = 3; 153 154 155 List<FacetOption> selectedFacetOptions = new List<FacetOption>(); 156 if (hasFeatureListItems) 157 { 158 allowAllQueryItems = false; 159 } 160 161 QueryResult queryResult = new QueryResult(); 162 string contentType = Model.Item.GetItem("Content").GetString("FeatureOptions"); 163 int totaleCount = 0; 164 165 switch (contentType) 166 { 167 case "articles": 168 numberOfItemsToShow = 4; 169 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 170 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 171 172 if (!hasFeatureListItems) 173 { 174 queryResult = showAll ? ContentRelationService.Instance.GetAllKnowledge(numberOfItemsToShow) : ContentRelationService.Instance.GetKnowledgeByCurrentPage(numberOfItemsToShow); 175 } 176 177 imageAspectRatio = "ratio-4x3"; 178 colClasslist.Add("col-md-3"); 179 break; 180 case "events": 181 numberOfItemsToShow = 3; 182 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 183 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 184 if (!hasFeatureListItems) 185 { 186 queryResult = showAll ? ContentRelationService.Instance.GetAllEvents(numberOfItemsToShow) : ContentRelationService.Instance.GetEventsByCurrentPage(numberOfItemsToShow); 187 } 188 189 imageAspectRatio = "ratio-16x9"; 190 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 191 colClasslist.Add("col-md-4 d-flex flex-column"); 192 break; 193 case "cases": 194 numberOfItemsToShow = 3; 195 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 196 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 197 if (!hasFeatureListItems) 198 { 199 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 200 { 201 queryResult = ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentFunding(numberOfItemsToShow); 202 } 203 else 204 { 205 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseCustomerStoriesByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(numberOfItemsToShow); 206 } 207 } 208 209 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 210 imageAspectRatio = "ratio-16x9"; 211 colClasslist.Add("col-md-4 d-flex flex-column"); 212 break; 213 case "news": 214 numberOfItemsToShow = 3; 215 numberOfItemsToShow = showAll ? numberOfItemsToShow * (rowsPerPage * 2) : numberOfItemsToShow; 216 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 217 if (!hasFeatureListItems) 218 { 219 queryResult = showAll ? ContentRelationService.Instance.GetAllNews(numberOfItemsToShow) : ContentRelationService.Instance.GetNewsByCurrentPage(numberOfItemsToShow); 220 } 221 222 rowWidthClasslist.Add("col-lg-11 ms-auto"); 223 colClasslist.Add("mb-5"); 224 break; 225 case "projects": 226 numberOfItemsToShow = 3; 227 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 228 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 229 if (!hasFeatureListItems) 230 { 231 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 232 { 233 queryResult = ContentRelationService.Instance.GetCaseProjectsByCurrentFunding(numberOfItemsToShow); 234 } 235 else 236 { 237 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseProjectsByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseProjectsByCurrentPage(numberOfItemsToShow); 238 } 239 } 240 241 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 242 imageAspectRatio = "ratio-16x9"; 243 colClasslist.Add("col-md-4 d-flex flex-column"); 244 break; 245 case "related-services": 246 numberOfItemsToShow = 6; 247 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 248 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 249 if (!hasFeatureListItems) 250 { 251 queryResult = ContentRelationService.Instance.GetRelatedServicesByCurrentPage(numberOfItemsToShow); 252 } 253 254 cardClasslist.Add("theme theme-mud p-4 pt-5 h-100"); 255 imageAspectRatio = "ratio-16x9"; 256 colClasslist.Add("col-md-4 d-flex flex-column"); 257 break; 258 } 259 260 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int result) ? result : 1; 261 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 262 263 List<string> pageIds = new List<string>(); 264 if (hasFeatureListItems) 265 { 266 pageIds.AddRange(featureListItems.Select(fli => fli.Fields.FirstOrDefault(f => f.Name == "Page")?.GetLink().PageId.ToString())); 267 } 268 else if (queryResult.Results.Any()) 269 { 270 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 271 } 272 273 string strTitle = string.Empty; 274 string strLink = string.Empty; 275 string strSummary = string.Empty; 276 string strImage = string.Empty; 277 string strType = string.Empty; 278 string badgeTheme = string.Empty; 279 DateTime strDate = new DateTime(); 280 } 281 282 @if ((queryResult.FacetGroups.Any() && allowAllQueryItems) || (queryResult.Results.Any() && !allowAllQueryItems) || featureListItems.Any()) 283 { 284 int loopCounter = 1; // Initialize loop counter for each group 285 286 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 287 <div class="container-xl"> 288 <div class="row justify-content-center"> 289 <div class="@rowWidthClasslist"> 290 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" 291 id="@($"query-result-{Model.Id}")"> 292 293 @if (hasLead || hasText || hasHeading) 294 { 295 <div class="js-content-container content-container col-12 mb-3"> 296 297 <div class="col-lg-6"> 298 <span> 299 @string.Join("", headings.Select(h => h.ToString())) 300 </span> 301 302 @if (!string.IsNullOrEmpty(lead)) 303 { 304 <p class="lead">@lead</p> 305 } 306 307 @text 308 309 </div> 310 </div> 311 } 312 313 @{ 314 ButtonViewModel btnViewResult = new ButtonViewModel 315 { 316 Text = Translate("View more"), 317 Type = ButtonType.Link, 318 DisplayType = ButtonDisplayType.Link 319 }; 320 321 if (showAll) 322 { 323 totaleCount = queryResult.TotalCount; 324 } 325 326 <a href="@showAllUrl" class="d-none">show all</a> 327 <form method="post" action="@Pageview.SearchFriendlyUrl" 328 data-response-target-element="content" tabindex="-1" aria-hidden="false" 329 class="d-flex js-dalgas-facets-form dalgas-facets-form" 330 data-total-count="@totaleCount" data-page-size="@numberOfItemsToShow"> 331 <input type="hidden" name="LayoutTemplate" 332 value="Designs/Swift/Swift_PageClean.cshtml"/> 333 <input type="hidden" name="PageNum" value="@pageNum"/> 334 <input type="hidden" name="PageSize" value="@numberOfItemsToShow"/> 335 @if (allowAllQueryItems) 336 { 337 if (showFacets) 338 { 339 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 340 { 341 foreach (Facet facet in facetGroup.Facets) 342 { 343 string showClass = " show"; 344 string ariaExpanded = "true"; 345 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty, RegexOptions.None, TimeSpan.FromMilliseconds(5000)); 346 347 348 if (facet.Options.Any()) 349 { 350 int selectedFacetsInGroup = 0; 351 352 foreach (FacetOption option in facet.Options) 353 { 354 if (option.Selected) 355 { 356 selectedFacetsInGroup++; 357 } 358 } 359 360 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 361 362 <div class="dropdown js-facets-selector"> 363 <button class="btn dropdown-toggle" type="button" 364 id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" 365 aria-expanded="false"> 366 @label 367 </button> 368 <div data-lenis-prevent class="dropdown-menu p-3" 369 aria-labelledby="FacetGroup_@facetGroupId" 370 style="min-width: 280px"> 371 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 372 { 373 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 374 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 375 string selected = facetOption.Selected ? "checked" : string.Empty; 376 string facetValue = Uri.UnescapeDataString(facetOption.Value); 377 string optionValue = $"[{facetValue}]"; 378 379 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 380 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 381 382 <label class="form-check mt-1" @disabled> 383 <input type="checkbox" 384 onclick="custom.QueryResult.update(event)" 385 class="form-check-input" 386 name="@facet.QueryParameter" 387 value="@optionValue" 388 data-filter-value="@facetLabel" @selected> 389 <span 390 class="form-check-label d-flex align-items-center"> 391 <span class="flex-fill">@facetLabel </span> 392 <small 393 class="opacity-85">@facetOption.Count</small> 394 </span> 395 </label> 396 397 if (facetOption.Selected) 398 { 399 FacetOption selectFacetOption = facetOption; 400 selectFacetOption.Name = facet.QueryParameter; 401 selectedFacetOptions.Add(selectFacetOption); 402 } 403 } 404 </div> 405 </div> 406 } 407 } 408 } 409 410 if (!string.IsNullOrEmpty(searchTerm)) 411 { 412 selectedFacetOptions.Add(new FacetOption() 413 { 414 Count = 1, 415 Label = searchTerm, 416 Name = "q", 417 Selected = true, 418 Value = searchTerm 419 }); 420 } 421 } 422 423 if (showSearch) 424 { 425 <div class="type-ahead-dropdown"> 426 <div class="position-relative suggest-form"> 427 <span 428 class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 429 @ReadFile(iconPath + "search.svg") 430 </span> 431 432 <input id="searchField_@Model.Id" 433 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 434 type="search" 435 placeholder="@Translate("Search here")" 436 autocomplete="off" 437 maxlength="255" 438 name="q" 439 value="@searchTerm" 440 data-original="@searchTerm"> 441 442 <button type="button" 443 onclick="custom.QueryResult.clearSearchField(event)" 444 class="btn h-100 icon-2 reset-search" 445 aria-label="@Translate("Clear search")" 446 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 447 @ReadFile(iconPath + "x.svg") 448 </button> 449 </div> 450 </div> 451 <input type="submit" onclick="custom.QueryResult.update(event)" 452 class="btn btn-primary" value="@Translate("Search", "Search")"> 453 } 454 } 455 </form> 456 457 if (showFacets && selectedFacetOptions.Any()) 458 { 459 <div 460 class="js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container mt-3"> 461 @foreach (FacetOption facetOption in selectedFacetOptions) 462 { 463 string facetValue = Uri.UnescapeDataString(facetOption.Value); 464 string optionValue = $"[{facetValue}]"; 465 <input class="visually-hidden" 466 id="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)" 467 name="@facetOption.Name" 468 onclick="custom.QueryResult.deselectFacetOption(event)" type="checkbox" 469 value="@optionValue" title="@facetOption.Label" checked> 470 <label class="badge theme border border-dark text-nowrap" 471 for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 472 <span class="text-nowrap">@(facetOption.Label)</span> 473 <span class="icon-2 ms-2"> 474 @ReadFile(iconPath + "x.svg") 475 </span> 476 </label> 477 } 478 479 @if (selectedFacetOptions.Count >= 3) 480 { 481 <input class="visually-hidden" id="ClearAll" name="ClearAll" 482 onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" 483 title="" checked> 484 <label class="badge theme border border-dark dalgas-btn-clear-all" 485 for="ClearAll"> 486 <span class="text-nowrap">@Translate("Clear all")</span> 487 <span class="icon-2 ms-2"> 488 @ReadFile(iconPath + "x.svg") 489 </span> 490 </label> 491 } 492 </div> 493 }} 494 495 @if (pageIds.Any() == false) 496 { 497 <div class="mt-4">@Translate("Your search returned no results...")</div> 498 } 499 500 <div 501 class="row @(!showAll ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 502 @foreach (string pageId in pageIds) 503 { 504 if (!int.TryParse(pageId, out int intPageId)) 505 { 506 continue; 507 } 508 509 Page page = Services.Pages.GetPage(intPageId); 510 511 if (page == null) 512 { 513 continue; 514 } 515 516 strTitle = page.Item["Title"]?.ToString(); 517 strSummary = page.Item["Summary"]?.ToString(); 518 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 519 btnViewResult.Id = "pageId_" + page.ID; 520 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 521 if (page.Item["Date"] != null) 522 { 523 strDate = (DateTime) page.Item["Date"]; 524 } 525 526 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 527 if (jpgIndex != -1) 528 { 529 strImage = strImage.Substring(0, jpgIndex + 4); 530 } 531 532 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 533 imageList.Add(featuredListImage); 534 535 if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 536 { 537 badgeTheme = ""; 538 if (loopCounter % 6 == 2 || loopCounter % 6 == 4) 539 { 540 newsModolusClasslist = "col-lg-5"; 541 imageAspectRatio = "ratio-16x9"; 542 if (showAll) 543 { 544 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 545 } 546 } 547 else 548 { 549 newsModolusClasslist = "col-lg-3"; 550 imageAspectRatio = "ratio-16x9 ratio-lg-3x4"; 551 if (showAll) 552 { 553 imageAspectRatio = "ratio-3x4"; 554 } 555 } 556 557 loopCounter++; 558 } 559 560 561 <div class="@colClasslist @newsModolusClasslist"> 562 563 @if (!string.IsNullOrEmpty(featuredListImage.Path)) 564 { 565 <a href="@btnViewResult.Url"> 566 <figure class="ratio @imageAspectRatio mb-0"> 567 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 568 </figure> 569 </a> 570 } 571 572 <div class="@cardClasslist"> 573 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events") 574 { 575 badgeTheme = "mb-5"; 576 } 577 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 578 { 579 if (strDate != null) 580 { 581 var date = strDate; 582 var formattedDate = date.ToLongDateString(); 583 if (date.TimeOfDay.ToString() != "00:00:00") 584 { 585 formattedDate = formattedDate + " - " + date.ToShortTimeString(); 586 } 587 588 <div class="badge mb-3 @badgeTheme"> 589 @formattedDate 590 </div> 591 } 592 } 593 594 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "cases" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "projects") 595 { 596 var selectedValues = page.Item["Type"].ToString(); 597 <div class="badge mb-5 mr-3 @badgeTheme"> 598 @ContentService.Instance.GetLabelForCaseType(selectedValues) 599 </div> 600 } 601 602 @{ 603 var badgeParms = new Dictionary<string, object>(); 604 badgeParms.Add("pageId", page.ID); 605 } 606 @RenderPartial("UserInterfaceModels/badge.cshtml", Model, badgeParms) 607 608 <h4> 609 <a href="@btnViewResult.Url" class="text-decoration-none"> 610 @strTitle 611 </a> 612 </h4> 613 @if (strSummary != null) 614 { 615 <span class="small">@strSummary</span> 616 } 617 618 <div class="mt-2"> 619 @RenderModel(btnViewResult) 620 </div> 621 </div> 622 </div> 623 } 624 </div> 625 626 @if (showAll && totaleCount > numberOfItemsToShow) 627 { 628 <div class="row"> 629 <div class="col-12 text-center"> 630 <button onclick="custom.QueryResult.getNextPage(event)" 631 class="btn btn-primary">@Translate("Vis flere")</button> 632 </div> 633 </div> 634 } 635 636 @if (hasButton) 637 { 638 <div class="js-content-container content-container col-12"> 639 640 <div class="d-flex flex-wrap gap-3"> 641 @foreach (ButtonViewModel button in buttons) 642 { 643 @button 644 } 645 </div> 646 647 </div> 648 } 649 650 </div> 651 </div> 652 </div> 653 </div> 654 @if (enableFifthElement) 655 { 656 <div class="fifth-element-section-container"> 657 <div class="fifth-element size-2 bottom-0 ob-50 right-0 @fifthElementTheme"> 658 @ReadFile(fifthElementIconPath + "sun.svg") 659 </div> 660 </div> 661 } 662 </section> 663 } 664 else 665 { 666 if (Pageview.IsVisualEditorMode) 667 { 668 <div class="container-xl alert alert-danger" role="alert"> 669 This <strong>@Model.Item.SystemName</strong> is empty 670 </div> 671 } 672 } 673

Tworzymy wartość dla Twojej firmy

Dalgas obsługuje wszystkie rodzaje zadań ekologicznych w różnych branżach i sektorach usług. Mamy doświadczenie, maszyny i referencje, aby zapewnić najlepsze możliwe rozwiązanie.

No products in cart