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
Get Contacted
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_6e0341eaf3cc4eb9b1049f4e899a7bf5.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Featured_Lists.cshtml:line 467 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 if (!hasFeatureListItems) 172 { 173 queryResult = showAll ? ContentRelationService.Instance.GetAllKnowledge(numberOfItemsToShow) : ContentRelationService.Instance.GetKnowledgeByCurrentPage(numberOfItemsToShow); 174 } 175 imageAspectRatio = "ratio-4x3"; 176 colClasslist.Add("col-md-3"); 177 break; 178 case "events": 179 numberOfItemsToShow = 3; 180 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 181 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 182 if (!hasFeatureListItems) 183 { 184 queryResult = showAll ? ContentRelationService.Instance.GetAllEvents(numberOfItemsToShow) : ContentRelationService.Instance.GetEventsByCurrentPage(numberOfItemsToShow); 185 } 186 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 187 colClasslist.Add("col-md-4"); 188 break; 189 case "cases": 190 numberOfItemsToShow = 3; 191 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 192 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 193 if (!hasFeatureListItems) 194 { 195 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseCustomerStoriesByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(numberOfItemsToShow); 196 } 197 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 198 imageAspectRatio = "ratio-16x9"; 199 colClasslist.Add("col-md-4 d-flex flex-column"); 200 break; 201 case "news": 202 numberOfItemsToShow = 3; 203 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 204 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 205 if (!hasFeatureListItems) 206 { 207 queryResult = showAll ? ContentRelationService.Instance.GetAllNews(numberOfItemsToShow) : ContentRelationService.Instance.GetNewsByCurrentPage(numberOfItemsToShow); 208 } 209 rowWidthClasslist.Add("col-lg-11 ms-auto"); 210 colClasslist.Add("mb-5"); 211 break; 212 case "projects": 213 numberOfItemsToShow = 3; 214 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 215 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 216 if (!hasFeatureListItems) 217 { 218 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseProjectsByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseProjectsByCurrentCase(numberOfItemsToShow); 219 } 220 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 221 imageAspectRatio = "ratio-16x9"; 222 colClasslist.Add("col-md-4 d-flex flex-column"); 223 break; 224 case "related-services": 225 numberOfItemsToShow = 6; 226 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 227 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 228 if (!hasFeatureListItems) 229 { 230 queryResult = ContentRelationService.Instance.GetRelatedServicesByCurrentPage(numberOfItemsToShow); 231 } 232 cardClasslist.Add("theme theme-mud p-4 pt-5 h-100"); 233 imageAspectRatio = "ratio-16x9"; 234 colClasslist.Add("col-md-4 d-flex flex-column"); 235 break; 236 } 237 238 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int result) ? result : 1; 239 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 240 241 List<string> pageIds = new List<string>(); 242 if (hasFeatureListItems) 243 { 244 pageIds.AddRange(featureListItems.Select(fli => fli.Fields.FirstOrDefault(f => f.Name == "Page")?.GetLink().PageId.ToString())); 245 } 246 else if (queryResult.Results.Any()) 247 { 248 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 249 } 250 251 string strTitle = string.Empty; 252 string strLink = string.Empty; 253 string strSummary = string.Empty; 254 string strImage = string.Empty; 255 string strType = string.Empty; 256 string badgeTheme = string.Empty; 257 DateTime strDate = new DateTime(); 258 } 259 260 @if ((queryResult.FacetGroups.Any() && allowAllQueryItems) || (queryResult.Results.Any() && !allowAllQueryItems) || featureListItems.Any()) 261 { 262 int loopCounter = 1; // Initialize loop counter for each group 263 264 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 265 <div class="container-xl"> 266 <div class="row justify-content-center"> 267 <div class="@rowWidthClasslist"> 268 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 269 270 @if (hasLead || hasText || hasHeading) 271 { 272 <div class="js-content-container content-container col-12 mb-3"> 273 274 <div class="col-lg-6"> 275 <span> 276 @string.Join("", headings.Select(h => h.ToString())) 277 </span> 278 279 @if (!string.IsNullOrEmpty(lead)) 280 { 281 <p class="lead">@lead</p> 282 } 283 284 @text 285 286 </div> 287 </div> 288 } 289 290 @{ 291 ButtonViewModel btnViewResult = new ButtonViewModel 292 { 293 Text = Translate("View more"), 294 Type = ButtonType.Link, 295 DisplayType = ButtonDisplayType.Link 296 }; 297 298 if (showAll) 299 { 300 totaleCount = queryResult.TotalCount; 301 } 302 303 <a href="@showAllUrl" class="d-none">show all</a> 304 <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"> 305 <input type="hidden" name="LayoutTemplate" value="Designs/Swift/Swift_PageClean.cshtml"/> 306 <input type="hidden" name="PageNum" value="@pageNum"/> 307 <input type="hidden" name="PageSize" value="@numberOfItemsToShow"/> 308 @if (allowAllQueryItems) 309 { 310 if (showFacets) 311 { 312 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 313 { 314 foreach (Facet facet in facetGroup.Facets) 315 { 316 string showClass = " show"; 317 string ariaExpanded = "true"; 318 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty, RegexOptions.None, TimeSpan.FromMilliseconds(5000)); 319 320 321 if (facet.Options.Any()) 322 { 323 int selectedFacetsInGroup = 0; 324 325 foreach (FacetOption option in facet.Options) 326 { 327 if (option.Selected) 328 { 329 selectedFacetsInGroup++; 330 } 331 } 332 333 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 334 335 <div class="dropdown js-facets-selector"> 336 <button class="btn dropdown-toggle" type="button" id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" aria-expanded="false"> 337 @label 338 </button> 339 <div data-lenis-prevent class="dropdown-menu p-3" aria-labelledby="FacetGroup_@facetGroupId" style="min-width: 280px"> 340 @foreach (FacetOption facetOption in facet.Options) 341 { 342 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 343 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 344 string selected = facetOption.Selected ? "checked" : string.Empty; 345 string facetValue = Uri.UnescapeDataString(facetOption.Value); 346 string optionValue = $"[{facetValue}]"; 347 348 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 349 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 350 351 <label class="form-check mt-1" @disabled> 352 <input type="checkbox" onclick="custom.QueryResult.update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 353 <span class="form-check-label d-flex align-items-center"> 354 <span class="flex-fill">@facetLabel </span> 355 <small class="opacity-85">@facetOption.Count</small> 356 </span> 357 </label> 358 359 if (facetOption.Selected) 360 { 361 FacetOption selectFacetOption = facetOption; 362 selectFacetOption.Name = facet.QueryParameter; 363 selectedFacetOptions.Add(selectFacetOption); 364 } 365 } 366 </div> 367 </div> 368 } 369 } 370 } 371 372 if (!string.IsNullOrEmpty(searchTerm)) 373 { 374 selectedFacetOptions.Add(new FacetOption() 375 { 376 Count = 1, 377 Label = searchTerm, 378 Name = "q", 379 Selected = true, 380 Value = searchTerm 381 }); 382 } 383 } 384 385 if (showSearch) 386 { 387 <div class="type-ahead-dropdown"> 388 <div class="position-relative suggest-form"> 389 <span class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 390 @ReadFile(iconPath + "search.svg") 391 </span> 392 393 <input id="searchField_@Model.Id" 394 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 395 type="search" 396 placeholder="@Translate("Search here")" 397 autocomplete="off" 398 maxlength="255" 399 name="q" 400 value="@searchTerm" 401 data-original="@searchTerm"> 402 403 <button type="button" 404 onclick="custom.QueryResult.clearSearchField(event)" 405 class="btn h-100 icon-2 reset-search" 406 aria-label="@Translate("Clear search")" 407 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 408 @ReadFile(iconPath + "x.svg") 409 </button> 410 </div> 411 </div> 412 <input type="submit" onclick="custom.QueryResult.update(event)" class="btn btn-primary" value="@Translate("Search", "Search")"> 413 } 414 } 415 </form> 416 417 if (showFacets && selectedFacetOptions.Any()) 418 { 419 <div class="js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container mt-3"> 420 @foreach (FacetOption facetOption in selectedFacetOptions) 421 { 422 string facetValue = Uri.UnescapeDataString(facetOption.Value); 423 string optionValue = $"[{facetValue}]"; 424 <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> 425 <label class="badge theme border border-dark text-nowrap" for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 426 <span class="text-nowrap">@(facetOption.Label)</span> 427 <span class="icon-2 ms-2"> 428 @ReadFile(iconPath + "x.svg") 429 </span> 430 </label> 431 } 432 433 @if (selectedFacetOptions.Count >= 3) 434 { 435 <input class="visually-hidden" id="ClearAll" name="ClearAll" onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" title="" checked> 436 <label class="badge theme border border-dark dalgas-btn-clear-all" for="ClearAll"> 437 <span class="text-nowrap">@Translate("Clear all")</span> 438 <span class="icon-2 ms-2"> 439 @ReadFile(iconPath + "x.svg") 440 </span> 441 </label> 442 } 443 </div> 444 } 445 } 446 447 @if (pageIds.Any() == false) 448 { 449 <div class="mt-4">@Translate("Your search returned no results...")</div> 450 } 451 452 <div class="row @(!showAll ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 453 @foreach (string pageId in pageIds) 454 { 455 if (!int.TryParse(pageId, out int intPageId)) 456 { 457 continue; 458 } 459 460 Page page = Services.Pages.GetPage(intPageId); 461 462 if (page == null) 463 { 464 continue; 465 } 466 467 strTitle = page.Item["Title"]?.ToString(); 468 strSummary = page.Item["Summary"]?.ToString(); 469 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 470 btnViewResult.Id = "pageId_" + page.ID; 471 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 472 if (page.Item["Date"] != null) 473 { 474 strDate = (DateTime)page.Item["Date"]; 475 } 476 477 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 478 if (jpgIndex != -1) 479 { 480 strImage = strImage.Substring(0, jpgIndex + 4); 481 } 482 483 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 484 imageList.Add(featuredListImage); 485 486 487 if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 488 { 489 badgeTheme = ""; 490 if (loopCounter % 6 == 2 || loopCounter % 6 == 4) 491 { 492 newsModolusClasslist = "col-lg-5"; 493 imageAspectRatio = "ratio-16x9"; 494 if (showAll) 495 { 496 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 497 } 498 } 499 else 500 { 501 newsModolusClasslist = "col-lg-3"; 502 imageAspectRatio = "ratio-16x9 ratio-lg-3x4"; 503 if (showAll) 504 { 505 imageAspectRatio = "ratio-3x4"; 506 } 507 } 508 509 loopCounter++; 510 } 511 512 513 <div class="@colClasslist @newsModolusClasslist"> 514 515 <a href="@btnViewResult.Url"> 516 <figure class="ratio @imageAspectRatio mb-0"> 517 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 518 </figure> 519 </a> 520 521 <div class="@cardClasslist"> 522 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events") 523 { 524 badgeTheme = "mb-5"; 525 } 526 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 527 { 528 if (strDate != null) 529 { 530 var date = strDate; 531 var formattedDate = date.ToString("d. MMMM yyyy"); 532 533 <div class="badge mb-3 @badgeTheme"> 534 @formattedDate 535 </div> 536 } 537 } 538 539 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "cases" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "projects") 540 { 541 var selectedValues = page.Item["Type"].ToString(); 542 var itemIdsFromSelectedValues = selectedValues.Split(',').Select(v => v.Trim()).ToList(); 543 544 foreach (var itemId in itemIdsFromSelectedValues) 545 { 546 if (!string.IsNullOrEmpty(itemId)) 547 { 548 var item = Services.Items.GetItem("HD_ArticleType", itemId); 549 string selectedTitle = !string.IsNullOrEmpty(item["Title"]?.ToString()) ? item["Title"].ToString() : ""; 550 <div class="badge mb-5 mr-3 @badgeTheme"> 551 @selectedTitle 552 </div> 553 } 554 } 555 } 556 557 558 <h4> 559 <a href="@btnViewResult.Url" class="text-decoration-none"> 560 @strTitle 561 </a> 562 </h4> 563 @if (strSummary != null) 564 { 565 <span class="small">@strSummary</span> 566 } 567 568 <div class="mt-2"> 569 @RenderModel(btnViewResult) 570 </div> 571 </div> 572 </div> 573 } 574 </div> 575 576 @if (showAll && totaleCount > numberOfItemsToShow) 577 { 578 <div class="row"> 579 <div class="col-12 text-center"> 580 <button onclick="custom.QueryResult.getNextPage(event)" class="btn btn-primary">@Translate("Vis flere")</button> 581 </div> 582 </div> 583 } 584 585 @if (hasButton) 586 { 587 <div class="js-content-container content-container col-12"> 588 589 <div class="d-flex flex-wrap gap-3"> 590 @foreach (ButtonViewModel button in buttons) 591 { 592 @button 593 } 594 </div> 595 596 </div> 597 } 598 599 </div> 600 </div> 601 </div> 602 </div> 603 @if (enableFifthElement) 604 { 605 <div class="fifth-element-section-container"> 606 <div class="fifth-element size-2 bottom-0 ob-50 right-0 @fifthElementTheme"> 607 @ReadFile(fifthElementIconPath + "sun.svg") 608 </div> 609 </div> 610 } 611 </section> 612 } 613 else 614 { 615 if (Pageview.IsVisualEditorMode) 616 { 617 <div class="container-xl alert alert-danger" role="alert"> 618 This <strong>@Model.Item.SystemName</strong> is empty 619 </div> 620 } 621 } 622
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
Naturgenopretning eller økosystemgenopretning – kært barn har mange navne eller?
For at nå vores internationale forpligtelser omkring biodiversitet skal den private sektor på banen. At øge biodiversitet er imidlertid noget som ligger meget langt fra de fleste virksomheders kerneforretning.Blomsterblandinger – naturlige blandinger med fokus på blomsterne og bierne
Med vores blomsterblandinger skaber vi et smukt og naturligt blomsterflor og et hjemmekendt sted for vores mange insekter ved at sætte hjemmehørende arter i fokus.Lettere overblik: Nyt LER-modul i NetGIS udviklet af HedeDanmark og WSP
I samarbejde med WSP Informatik har HedeDanmark medvirket til udviklingen af en ny funktion i NetGIS, hvor LER-data (Ledningsejerregistret) nu bliver tilgængelige. Det vil gøre hverdagen lettere for både vores medarbejdere og underentreprenører.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?Whitepaper - COOP Storå Folkeskov
Denne case illustrerer et af de mange mulige projekter, som vi hos Dalgas kan realisere inden for Naturbaserede Løsninger.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.Nu er det bevist: Grødeskæring med omtanke og pincet kan gavne både miljøet og landmændene
Et stort forskningsprojekt dokumenterer efter fire års forsøg i fynske vandløb, at man kan holde vandløb fri for den grøde, der generer landbruget, uden at det går ud over biodiversiteten. Det giver Danmark bedre mulighed for at nå miljømålene.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.Ny skovstandard for PEFC-certificerede skove
PEFC Danmark har justeret deres skovstandard og dermed de retningslinjer, skovdriften skal leve op til i fremtiden for at være PEFC certificeret.Glædelig læsning i skovstatistik: Skoven vokser fortsat
Ny skovstatistik fra Københavns Universitet viser fortsat vækst i CO2 bundet i træer i skoven, mere dødt ved samt en markant stigning i både areal og mængde af meget gamle og store træer.Første FSC-certificering af økosystemtjenester i Skandinavien
En FSC-certificering, der følger træernes optag af CO2 er for første gang blevet uddelt i de skandinaviske lande.Studerende tager 200 år gamle træidéer ind i fremtiden
Arkitektstuderende har undersøgt, hvordan man kan bruge træ, der ellers ville ende i varmeværker, til at bygge med i fremtiden – ved at se på, hvordan man gjorde for 200 år siden.HedeDanmarks LogStackPro-system vinder tysk innovationspris
Tyske skovfolk har taget træopmålingssystemet godt til sig og har nu tildelt LogStackPro KWF Member Award for innovation.HedeDanmarks skovejere får nu skoven med i lommen
HedeDanmark og Skovkortet.dk har indgået samarbejde om visning af skovkort på Skovportalen, så skovejere snart får flere funktioner og mere viden om deres skov.Hjælp til naturen med sprængladninger og motorsave
Sprængning og anden veteranisering af træer kan se voldsomt ud - men det gavner faktisk naturen.Nye krav til flis fra læhegn
De øgede krav fra årsskiftet til dokumentation af flis fra læhegn betyder, at landmænd skal tænke sig godt om, inden de selv giver sig i kast med at tynde ud i træerne.Se Skovrådets 7 anbefalinger
Syv konkrete anbefalinger til hvordan dansk produktion af træ kan bidrage til den grønne omstilling er netop overleveret fra Skovrådet, hvor HedeDanmark er repræsenteret, til miljøminister Lea Wermelin.Synchronicer: Digitalt værktøj til grønne service
Man kan kalde det Grøn Service 2.0, når HedeDanmark integrerer Synchronicer i sit arbejde – den digitale platform sørger nemlig for en mere effektiv og overskuelig arbejdsdag.4 store plusser ved at skifte fra brændstof til batteri
Der er mange fordele at høste, når man skifter fra brændstofdrevne redskaber til batteridrevne. Der højner arbejdsmiljøet for medarbejdere og forurener omgivelserne minde - både hvad angår støj og udstødningsgasser.Solcelleparker – ny mulighed for øget biodiversitet og natur
Solcelleparker skyder i stor stil op på tegnebrættet og i den danske natur i disse år. Det er gode nyheder for den vedvarende energi, men det har også givet anledning til debat om placeringerne.Gymnasieelever beregner CO2-optag i skoven
21 elever fra Aabenraa Statsskole var mandag den 5. august i skoven ved Aabenraa for at bruge teorien fra biologiundervisningen i den virkelige verden og forstå skovens rolle både i klima- og biodiversitetsdebatten.Digitale, giftfri fælder sikrer effektiv skadedyrsbekæmpelse
HedeDanmarks skadedyrsteknikere får besked, så snart der er fanget en rotte i én af de giftfri og digitale fælder fra TrapMe. Kom med en skadedyrstekniker, når han får en rød gnaver-alarm og rykker ud for at tjekke, hvad der er gået i fælden.Gode råd om skovbrand
Skovbrand skal så vidt muligt undgås, for ingen har lyst til at se sine værdier blive opslugt af flammer. Heldigvis kan du selv nedbringe risikoen. Og skulle ulykken være ude, vil du med lidt forberedelse kunne begrænse skaderne væsentligt!HedeDanmarks kystbeskyttelsesekspert: Afgørende skridt at fordoble kystbeskyttelsesmidler
Regeringen offentliggjorde i uge 12 nye femårige fællesaftaler med en række vestjyske kommuner om at fordoble midlerne til at beskytte særligt udsatte kyststrækninger.Skovfoged om december-orkanen
December-orkanen 1999 har sat store aftryk på den måde, HedeDanmark i dag griber arbejdet i de danske skove an. Skovfoged Leif Lauridsen husker tilbage på orkan-natten for 20 år siden og arbejdet i de følgende måneder.Skoven skal bruges! ifølge Göran Persson
Skovejer og tidligere svensk statsminister Göran Persson meldte ved Timber og Market skovbrugskonference klart ud om skovenes store og vigtige rolle som en del af løsningen på klimaudfordringerne.Flere gode grunde til at elske skoven
International forskning peger på, at skoven kan have positiv effekt på dit helbred.HedeDanmark bidrager til forskning i bedre vandløb
Forskere fra Aarhus Universitet (AU) vil finde den bedste måde at lede vand i små vandløb væk fra markerne og samtidig sikre et godt vandmiljø.Lovændring - sådan bliver kystsikring nemmere
Torsdag d. 18 januar vedtog Folketinget en lovændring, der skal gøre det nemmere for grundejere at beskytte deres hjem mod havet. Læs, hvad det betyder for dine muligheder for kystsikring.Billigere læhegn uden tilskud med nyt pulje-samarbejde
HedeDanmark og Hjørring Læplantningslaug går sammen om at tilbyde lodsejere billigere læplantning uden tilskud.Skovkalenderen
Vi har gennem årene samlet en række tips og inspiration til din skovforvaltning helt fra januar til december.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?Whitepaper - COOP Storå Folkeskov
Denne case illustrerer et af de mange mulige projekter, som vi hos Dalgas kan realisere inden for Naturbaserede Løsninger.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.