Biodiversitet i skoven
Skoven er hjemsted for en lang række organismer. Alt fra svampe og planter til insekter og dyreliv. Ved at bevare en konstant dynamik i de naturlige skove, skabes der bedre betingelser for, at naturlige levesteder og økosystemer kan udvikle sig. Det fremmer den lokale biodiversitet i din skov.
Skovdrift og biodiversitet i samspil
Hver skov er unik. Samtidig har du som skovejer bestemte ønsker og mål med netop din skovs funktioner. Multifunktionel anvendelse af skovarealer giver stor værdi, og betyder at du kan fremme naturværdien i skoven – samtidig med at du anvender området til produktion og rekreative formål.
Skoven har masser at give af. Det kan være pyntegrønt, byggematerialer og energi. Men skoven kan også være med til at beskytte vores grundvand, og fungere som virkemiddel mod klimaforandringer ved at sikre binding af kulstof.
Hvordan kan din skov bidrage til biodiversitet?
Du kan som skovejer vælge at lægge vægt på forskellige aspekter af skovens funktioner. For at øge naturværdien for de arter der lever i din skov, findes der en række praktiske tiltag, du kan gennemføre.
Tiltag kan fx være:
- Bevare og fremme veterantræer samt aktivt skabe mere dødt ved
- Etablere eller bevare skovenge og lysninger
- Hel- eller halvårsgræsning med husdyr, for at hæmme tilgroning og understøtte den biologiske mangfoldighed
- Udtag areal til urørt, eventuelt med tiltag for at gøre arealet klar
- Indsatser målrettet én eller flere truede arter
Dokumentation af tiltag
Vi anbefaler at du dokumenterer effekten af de tiltag du gennemfører for biodiversiteten. Det giver troværdighed. Og dataene kan bakke dig op, når du fortæller omverdenen at din skov har bidraget til at fremme biodiversitet.
Hvis dine tiltag samtidig valideres af en uafhængig tredjepart, kan vi hjælpe dig med at opnå en Økosystemtjenestecertificering, FSC®.
Din lokale skovfoged fra Dalgas giver dig vejledning og forslag til tiltag der vil øge naturværdien, og rådgiver om de konkrete muligheder der er i din skov.
Kontakt din lokale skovfoged
Sollen wir Sie kontaktieren?
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Featured_Lists.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_09b7fcaa01ba47a0a47df501caca0ac5.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Featured_Lists.cshtml:line 481 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 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 190 colClasslist.Add("col-md-4"); 191 break; 192 case "cases": 193 numberOfItemsToShow = 3; 194 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 195 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 196 if (!hasFeatureListItems) 197 { 198 if (PageView.Current().Page.Item.SystemName.Contains("Funding")) 199 { 200 queryResult = ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentFunding(numberOfItemsToShow); 201 } 202 else 203 { 204 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseCustomerStoriesByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(numberOfItemsToShow); 205 } 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 : 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 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseProjectsByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseProjectsByCurrentPage(numberOfItemsToShow); 232 } 233 234 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 235 imageAspectRatio = "ratio-16x9"; 236 colClasslist.Add("col-md-4 d-flex flex-column"); 237 break; 238 case "related-services": 239 numberOfItemsToShow = 6; 240 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 241 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 242 if (!hasFeatureListItems) 243 { 244 queryResult = ContentRelationService.Instance.GetRelatedServicesByCurrentPage(numberOfItemsToShow); 245 } 246 247 cardClasslist.Add("theme theme-mud p-4 pt-5 h-100"); 248 imageAspectRatio = "ratio-16x9"; 249 colClasslist.Add("col-md-4 d-flex flex-column"); 250 break; 251 } 252 253 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int result) ? result : 1; 254 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 255 256 List<string> pageIds = new List<string>(); 257 if (hasFeatureListItems) 258 { 259 pageIds.AddRange(featureListItems.Select(fli => fli.Fields.FirstOrDefault(f => f.Name == "Page")?.GetLink().PageId.ToString())); 260 } 261 else if (queryResult.Results.Any()) 262 { 263 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 264 } 265 266 string strTitle = string.Empty; 267 string strLink = string.Empty; 268 string strSummary = string.Empty; 269 string strImage = string.Empty; 270 string strType = string.Empty; 271 string badgeTheme = string.Empty; 272 DateTime strDate = new DateTime(); 273 } 274 275 @if ((queryResult.FacetGroups.Any() && allowAllQueryItems) || (queryResult.Results.Any() && !allowAllQueryItems) || featureListItems.Any()) 276 { 277 int loopCounter = 1; // Initialize loop counter for each group 278 279 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 280 <div class="container-xl"> 281 <div class="row justify-content-center"> 282 <div class="@rowWidthClasslist"> 283 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 284 285 @if (hasLead || hasText || hasHeading) 286 { 287 <div class="js-content-container content-container col-12 mb-3"> 288 289 <div class="col-lg-6"> 290 <span> 291 @string.Join("", headings.Select(h => h.ToString())) 292 </span> 293 294 @if (!string.IsNullOrEmpty(lead)) 295 { 296 <p class="lead">@lead</p> 297 } 298 299 @text 300 301 </div> 302 </div> 303 } 304 305 @{ 306 ButtonViewModel btnViewResult = new ButtonViewModel 307 { 308 Text = Translate("View more"), 309 Type = ButtonType.Link, 310 DisplayType = ButtonDisplayType.Link 311 }; 312 313 if (showAll) 314 { 315 totaleCount = queryResult.TotalCount; 316 } 317 318 <a href="@showAllUrl" class="d-none">show all</a> 319 <form method="post" action="@Pageview.SearchFriendlyUrl" data-response-target-element="content" tabindex="-1" aria-hidden="false" class="d-flex js-dalgas-facets-form dalgas-facets-form" data-total-count="@totaleCount" data-page-size="@numberOfItemsToShow"> 320 <input type="hidden" name="LayoutTemplate" value="Designs/Swift/Swift_PageClean.cshtml"/> 321 <input type="hidden" name="PageNum" value="@pageNum"/> 322 <input type="hidden" name="PageSize" value="@numberOfItemsToShow"/> 323 @if (allowAllQueryItems) 324 { 325 if (showFacets) 326 { 327 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 328 { 329 foreach (Facet facet in facetGroup.Facets) 330 { 331 string showClass = " show"; 332 string ariaExpanded = "true"; 333 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty, RegexOptions.None, TimeSpan.FromMilliseconds(5000)); 334 335 336 if (facet.Options.Any()) 337 { 338 int selectedFacetsInGroup = 0; 339 340 foreach (FacetOption option in facet.Options) 341 { 342 if (option.Selected) 343 { 344 selectedFacetsInGroup++; 345 } 346 } 347 348 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 349 350 <div class="dropdown js-facets-selector"> 351 <button class="btn dropdown-toggle" type="button" id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" aria-expanded="false"> 352 @label 353 </button> 354 <div data-lenis-prevent class="dropdown-menu p-3" aria-labelledby="FacetGroup_@facetGroupId" style="min-width: 280px"> 355 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 356 { 357 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 358 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 359 string selected = facetOption.Selected ? "checked" : string.Empty; 360 string facetValue = Uri.UnescapeDataString(facetOption.Value); 361 string optionValue = $"[{facetValue}]"; 362 363 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 364 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 365 366 <label class="form-check mt-1" @disabled> 367 <input type="checkbox" onclick="custom.QueryResult.update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 368 <span class="form-check-label d-flex align-items-center"> 369 <span class="flex-fill">@facetLabel </span> 370 <small class="opacity-85">@facetOption.Count</small> 371 </span> 372 </label> 373 374 if (facetOption.Selected) 375 { 376 FacetOption selectFacetOption = facetOption; 377 selectFacetOption.Name = facet.QueryParameter; 378 selectedFacetOptions.Add(selectFacetOption); 379 } 380 } 381 </div> 382 </div> 383 } 384 } 385 } 386 387 if (!string.IsNullOrEmpty(searchTerm)) 388 { 389 selectedFacetOptions.Add(new FacetOption() 390 { 391 Count = 1, 392 Label = searchTerm, 393 Name = "q", 394 Selected = true, 395 Value = searchTerm 396 }); 397 } 398 } 399 400 if (showSearch) 401 { 402 <div class="type-ahead-dropdown"> 403 <div class="position-relative suggest-form"> 404 <span class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 405 @ReadFile(iconPath + "search.svg") 406 </span> 407 408 <input id="searchField_@Model.Id" 409 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 410 type="search" 411 placeholder="@Translate("Search here")" 412 autocomplete="off" 413 maxlength="255" 414 name="q" 415 value="@searchTerm" 416 data-original="@searchTerm"> 417 418 <button type="button" 419 onclick="custom.QueryResult.clearSearchField(event)" 420 class="btn h-100 icon-2 reset-search" 421 aria-label="@Translate("Clear search")" 422 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 423 @ReadFile(iconPath + "x.svg") 424 </button> 425 </div> 426 </div> 427 <input type="submit" onclick="custom.QueryResult.update(event)" class="btn btn-primary" value="@Translate("Search", "Search")"> 428 } 429 } 430 </form> 431 432 if (showFacets && selectedFacetOptions.Any()) 433 { 434 <div class="js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container mt-3"> 435 @foreach (FacetOption facetOption in selectedFacetOptions) 436 { 437 string facetValue = Uri.UnescapeDataString(facetOption.Value); 438 string optionValue = $"[{facetValue}]"; 439 <input class="visually-hidden" id="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)" name="@facetOption.Name" onclick="custom.QueryResult.deselectFacetOption(event)" type="checkbox" value="@optionValue" title="@facetOption.Label" checked> 440 <label class="badge theme border border-dark text-nowrap" for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 441 <span class="text-nowrap">@(facetOption.Label)</span> 442 <span class="icon-2 ms-2"> 443 @ReadFile(iconPath + "x.svg") 444 </span> 445 </label> 446 } 447 448 @if (selectedFacetOptions.Count >= 3) 449 { 450 <input class="visually-hidden" id="ClearAll" name="ClearAll" onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" title="" checked> 451 <label class="badge theme border border-dark dalgas-btn-clear-all" for="ClearAll"> 452 <span class="text-nowrap">@Translate("Clear all")</span> 453 <span class="icon-2 ms-2"> 454 @ReadFile(iconPath + "x.svg") 455 </span> 456 </label> 457 } 458 </div> 459 }} 460 461 @if (pageIds.Any() == false) 462 { 463 <div class="mt-4">@Translate("Your search returned no results...")</div> 464 } 465 466 <div class="row @(!showAll ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 467 @foreach (string pageId in pageIds) 468 { 469 if (!int.TryParse(pageId, out int intPageId)) 470 { 471 continue; 472 } 473 474 Page page = Services.Pages.GetPage(intPageId); 475 476 if (page == null) 477 { 478 continue; 479 } 480 481 strTitle = page.Item["Title"]?.ToString(); 482 strSummary = page.Item["Summary"]?.ToString(); 483 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 484 btnViewResult.Id = "pageId_" + page.ID; 485 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 486 if (page.Item["Date"] != null) 487 { 488 strDate = (DateTime) page.Item["Date"]; 489 } 490 491 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 492 if (jpgIndex != -1) 493 { 494 strImage = strImage.Substring(0, jpgIndex + 4); 495 } 496 497 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 498 imageList.Add(featuredListImage); 499 500 501 if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 502 { 503 badgeTheme = ""; 504 if (loopCounter % 6 == 2 || loopCounter % 6 == 4) 505 { 506 newsModolusClasslist = "col-lg-5"; 507 imageAspectRatio = "ratio-16x9"; 508 if (showAll) 509 { 510 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 511 } 512 } 513 else 514 { 515 newsModolusClasslist = "col-lg-3"; 516 imageAspectRatio = "ratio-16x9 ratio-lg-3x4"; 517 if (showAll) 518 { 519 imageAspectRatio = "ratio-3x4"; 520 } 521 } 522 523 loopCounter++; 524 } 525 526 527 <div class="@colClasslist @newsModolusClasslist"> 528 529 <a href="@btnViewResult.Url"> 530 <figure class="ratio @imageAspectRatio mb-0"> 531 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 532 </figure> 533 </a> 534 535 <div class="@cardClasslist"> 536 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events") 537 { 538 badgeTheme = "mb-5"; 539 } 540 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 541 { 542 if (strDate != null) 543 { 544 var date = strDate; 545 var formattedDate = date.ToString("d. MMMM yyyy"); 546 547 <div class="badge mb-3 @badgeTheme"> 548 @formattedDate 549 </div> 550 } 551 } 552 553 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "cases" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "projects") 554 { 555 var selectedValues = page.Item["Type"].ToString(); 556 <div class="badge mb-5 mr-3 @badgeTheme"> 557 @ContentService.Instance.GetLabelForCaseType(selectedValues) 558 </div> 559 } 560 561 @{ 562 var badgeParms = new Dictionary<string, object>(); 563 badgeParms.Add("pageId", page.ID); 564 } 565 @RenderPartial("UserInterfaceModels/badge.cshtml", Model, badgeParms) 566 567 <h4> 568 <a href="@btnViewResult.Url" class="text-decoration-none"> 569 @strTitle 570 </a> 571 </h4> 572 @if (strSummary != null) 573 { 574 <span class="small">@strSummary</span> 575 } 576 577 <div class="mt-2"> 578 @RenderModel(btnViewResult) 579 </div> 580 </div> 581 </div> 582 } 583 </div> 584 585 @if (showAll && totaleCount > numberOfItemsToShow) 586 { 587 <div class="row"> 588 <div class="col-12 text-center"> 589 <button onclick="custom.QueryResult.getNextPage(event)" class="btn btn-primary">@Translate("Vis flere")</button> 590 </div> 591 </div> 592 } 593 594 @if (hasButton) 595 { 596 <div class="js-content-container content-container col-12"> 597 598 <div class="d-flex flex-wrap gap-3"> 599 @foreach (ButtonViewModel button in buttons) 600 { 601 @button 602 } 603 </div> 604 605 </div> 606 } 607 608 </div> 609 </div> 610 </div> 611 </div> 612 @if (enableFifthElement) 613 { 614 <div class="fifth-element-section-container"> 615 <div class="fifth-element size-2 bottom-0 ob-50 right-0 @fifthElementTheme"> 616 @ReadFile(fifthElementIconPath + "sun.svg") 617 </div> 618 </div> 619 } 620 </section> 621 } 622 else 623 { 624 if (Pageview.IsVisualEditorMode) 625 { 626 <div class="container-xl alert alert-danger" role="alert"> 627 This <strong>@Model.Item.SystemName</strong> is empty 628 </div> 629 } 630 } 631
Sådan arbejder vi med naturbaserede løsninger
End-to-end løsninger til din ESG-strategi
Vores Naturbaserede Løsninger genopretter økosystemer og fremmer bæredygtighed gennem innovative handlinger. Vi udvikler skræddersyede projekter, der gavner miljøet og bidrager til din virksomheds ESG-strategi.
Med en komplet service - helt fra rådgivning til implementering og monitorering sikrer vi, at projekterne er baseret på nyeste viden og bedste praksis. Vi hjælper med at realisere ambitiøse økosystemgenopretningsprojekter, sikre compliance og skabe synlige resultater, der styrker jeres ESG-profil og brand.
Sådan arbejder vi med biodiversitet
En digital og databaseret tilgang
Hos Dalgas skaber vi levesteder, hvor forskellige arter kan trives og bidrage til et sundt og robust økosystem. Et mangfoldigt økosystem, der fremmer både naturens og menneskers trivsel.
Vi kombinerer data, videnskabelig viden og praktisk erfaring for at sikre, at dit biodiversitetsprojekt har en positiv og varig effekt i naturen. Derfor er dokumentation og monitorering helt centrale elementer i vores arbejde. Og så kan du bruge dataene i din ESG-rapportering.
Artikler og inspiration
Whitepaper - COOP Storå Folkeskov
Denne case illustrerer et af de mange mulige projekter, som vi hos Dalgas kan realisere inden for Naturbaserede Løsninger.Whitepaper - Klimaskov som aktiv klimahandling
Har din virksomhed ambitiøse klimamål – og søger I mere viden om, hvordan I konkret kan bidrage til den grønne omstilling?Den grønne trepart og skovrejsning
Mandag den 24. juni offentliggjorde parterne 1 bag den grønne trepart en aftaletekst kaldet ”Aftale om et Grønt Danmark”. Heri er der en række nye forslag til tilskudsordninger for privat skovrejsning.Skovkalenderen - få tips til din skovforvaltning
Vi har gennem årene samlet en række tips og inspiration til din skovforvaltning helt fra januar til december.Vi skaber værdi for din branche
Dalgas løser alle typer grønne opgaver i en række forskellige brancher og sektorer på tværs af ydelser. Vi har erfaringen, maskinparken og referencerne, der sikrer dig den bedst mulige løsning.