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_3fdc53c18e7049d5b6bd0bd234d9c8fd.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Featured_Lists.cshtml:line 472 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 176 imageAspectRatio = "ratio-4x3"; 177 colClasslist.Add("col-md-3"); 178 break; 179 case "events": 180 numberOfItemsToShow = 3; 181 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 182 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 183 if (!hasFeatureListItems) 184 { 185 queryResult = showAll ? ContentRelationService.Instance.GetAllEvents(numberOfItemsToShow) : ContentRelationService.Instance.GetEventsByCurrentPage(numberOfItemsToShow); 186 } 187 188 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 189 colClasslist.Add("col-md-4"); 190 break; 191 case "cases": 192 numberOfItemsToShow = 3; 193 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 194 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 195 if (!hasFeatureListItems) 196 { 197 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseCustomerStoriesByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(numberOfItemsToShow); 198 } 199 200 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 201 imageAspectRatio = "ratio-16x9"; 202 colClasslist.Add("col-md-4 d-flex flex-column"); 203 break; 204 case "news": 205 numberOfItemsToShow = 3; 206 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 207 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 208 if (!hasFeatureListItems) 209 { 210 queryResult = showAll ? ContentRelationService.Instance.GetAllNews(numberOfItemsToShow) : ContentRelationService.Instance.GetNewsByCurrentPage(numberOfItemsToShow); 211 } 212 213 rowWidthClasslist.Add("col-lg-11 ms-auto"); 214 colClasslist.Add("mb-5"); 215 break; 216 case "projects": 217 numberOfItemsToShow = 3; 218 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 219 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 220 if (!hasFeatureListItems) 221 { 222 queryResult = showAll ? ContentRelationService.Instance.GetAllCaseProjectsByCurrentPage(numberOfItemsToShow) : ContentRelationService.Instance.GetCaseProjectsByCurrentCase(numberOfItemsToShow); 223 } 224 225 cardClasslist.Add("theme theme-mud p-4 pt-4 h-100"); 226 imageAspectRatio = "ratio-16x9"; 227 colClasslist.Add("col-md-4 d-flex flex-column"); 228 break; 229 case "related-services": 230 numberOfItemsToShow = 6; 231 numberOfItemsToShow = showAll ? numberOfItemsToShow * rowsPerPage : numberOfItemsToShow; 232 numberOfItemsToShow = pageSize > 0 ? pageSize : numberOfItemsToShow; 233 if (!hasFeatureListItems) 234 { 235 queryResult = ContentRelationService.Instance.GetRelatedServicesByCurrentPage(numberOfItemsToShow); 236 } 237 238 cardClasslist.Add("theme theme-mud p-4 pt-5 h-100"); 239 imageAspectRatio = "ratio-16x9"; 240 colClasslist.Add("col-md-4 d-flex flex-column"); 241 break; 242 } 243 244 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int result) ? result : 1; 245 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 246 247 List<string> pageIds = new List<string>(); 248 if (hasFeatureListItems) 249 { 250 pageIds.AddRange(featureListItems.Select(fli => fli.Fields.FirstOrDefault(f => f.Name == "Page")?.GetLink().PageId.ToString())); 251 } 252 else if (queryResult.Results.Any()) 253 { 254 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 255 } 256 257 string strTitle = string.Empty; 258 string strLink = string.Empty; 259 string strSummary = string.Empty; 260 string strImage = string.Empty; 261 string strType = string.Empty; 262 string badgeTheme = string.Empty; 263 DateTime strDate = new DateTime(); 264 } 265 266 @if ((queryResult.FacetGroups.Any() && allowAllQueryItems) || (queryResult.Results.Any() && !allowAllQueryItems) || featureListItems.Any()) 267 { 268 int loopCounter = 1; // Initialize loop counter for each group 269 270 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 271 <div class="container-xl"> 272 <div class="row justify-content-center"> 273 <div class="@rowWidthClasslist"> 274 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 275 276 @if (hasLead || hasText || hasHeading) 277 { 278 <div class="js-content-container content-container col-12 mb-3"> 279 280 <div class="col-lg-6"> 281 <span> 282 @string.Join("", headings.Select(h => h.ToString())) 283 </span> 284 285 @if (!string.IsNullOrEmpty(lead)) 286 { 287 <p class="lead">@lead</p> 288 } 289 290 @text 291 292 </div> 293 </div> 294 } 295 296 @{ 297 ButtonViewModel btnViewResult = new ButtonViewModel 298 { 299 Text = Translate("View more"), 300 Type = ButtonType.Link, 301 DisplayType = ButtonDisplayType.Link 302 }; 303 304 if (showAll) 305 { 306 totaleCount = queryResult.TotalCount; 307 } 308 309 <a href="@showAllUrl" class="d-none">show all</a> 310 <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"> 311 <input type="hidden" name="LayoutTemplate" value="Designs/Swift/Swift_PageClean.cshtml"/> 312 <input type="hidden" name="PageNum" value="@pageNum"/> 313 <input type="hidden" name="PageSize" value="@numberOfItemsToShow"/> 314 @if (allowAllQueryItems) 315 { 316 if (showFacets) 317 { 318 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 319 { 320 foreach (Facet facet in facetGroup.Facets) 321 { 322 string showClass = " show"; 323 string ariaExpanded = "true"; 324 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty, RegexOptions.None, TimeSpan.FromMilliseconds(5000)); 325 326 327 if (facet.Options.Any()) 328 { 329 int selectedFacetsInGroup = 0; 330 331 foreach (FacetOption option in facet.Options) 332 { 333 if (option.Selected) 334 { 335 selectedFacetsInGroup++; 336 } 337 } 338 339 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 340 341 <div class="dropdown js-facets-selector"> 342 <button class="btn dropdown-toggle" type="button" id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" aria-expanded="false"> 343 @label 344 </button> 345 <div data-lenis-prevent class="dropdown-menu p-3" aria-labelledby="FacetGroup_@facetGroupId" style="min-width: 280px"> 346 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 347 { 348 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 349 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 350 string selected = facetOption.Selected ? "checked" : string.Empty; 351 string facetValue = Uri.UnescapeDataString(facetOption.Value); 352 string optionValue = $"[{facetValue}]"; 353 354 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 355 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 356 357 <label class="form-check mt-1" @disabled> 358 <input type="checkbox" onclick="custom.QueryResult.update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 359 <span class="form-check-label d-flex align-items-center"> 360 <span class="flex-fill">@facetLabel </span> 361 <small class="opacity-85">@facetOption.Count</small> 362 </span> 363 </label> 364 365 if (facetOption.Selected) 366 { 367 FacetOption selectFacetOption = facetOption; 368 selectFacetOption.Name = facet.QueryParameter; 369 selectedFacetOptions.Add(selectFacetOption); 370 } 371 } 372 </div> 373 </div> 374 } 375 } 376 } 377 378 if (!string.IsNullOrEmpty(searchTerm)) 379 { 380 selectedFacetOptions.Add(new FacetOption() 381 { 382 Count = 1, 383 Label = searchTerm, 384 Name = "q", 385 Selected = true, 386 Value = searchTerm 387 }); 388 } 389 } 390 391 if (showSearch) 392 { 393 <div class="type-ahead-dropdown"> 394 <div class="position-relative suggest-form"> 395 <span class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 396 @ReadFile(iconPath + "search.svg") 397 </span> 398 399 <input id="searchField_@Model.Id" 400 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 401 type="search" 402 placeholder="@Translate("Search here")" 403 autocomplete="off" 404 maxlength="255" 405 name="q" 406 value="@searchTerm" 407 data-original="@searchTerm"> 408 409 <button type="button" 410 onclick="custom.QueryResult.clearSearchField(event)" 411 class="btn h-100 icon-2 reset-search" 412 aria-label="@Translate("Clear search")" 413 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 414 @ReadFile(iconPath + "x.svg") 415 </button> 416 </div> 417 </div> 418 <input type="submit" onclick="custom.QueryResult.update(event)" class="btn btn-primary" value="@Translate("Search", "Search")"> 419 } 420 } 421 </form> 422 423 if (showFacets && selectedFacetOptions.Any()) 424 { 425 <div class="js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container mt-3"> 426 @foreach (FacetOption facetOption in selectedFacetOptions) 427 { 428 string facetValue = Uri.UnescapeDataString(facetOption.Value); 429 string optionValue = $"[{facetValue}]"; 430 <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> 431 <label class="badge theme border border-dark text-nowrap" for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 432 <span class="text-nowrap">@(facetOption.Label)</span> 433 <span class="icon-2 ms-2"> 434 @ReadFile(iconPath + "x.svg") 435 </span> 436 </label> 437 } 438 439 @if (selectedFacetOptions.Count >= 3) 440 { 441 <input class="visually-hidden" id="ClearAll" name="ClearAll" onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" title="" checked> 442 <label class="badge theme border border-dark dalgas-btn-clear-all" for="ClearAll"> 443 <span class="text-nowrap">@Translate("Clear all")</span> 444 <span class="icon-2 ms-2"> 445 @ReadFile(iconPath + "x.svg") 446 </span> 447 </label> 448 } 449 </div> 450 }} 451 452 @if (pageIds.Any() == false) 453 { 454 <div class="mt-4">@Translate("Your search returned no results...")</div> 455 } 456 457 <div class="row @(!showAll ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 458 @foreach (string pageId in pageIds) 459 { 460 if (!int.TryParse(pageId, out int intPageId)) 461 { 462 continue; 463 } 464 465 Page page = Services.Pages.GetPage(intPageId); 466 467 if (page == null) 468 { 469 continue; 470 } 471 472 strTitle = page.Item["Title"]?.ToString(); 473 strSummary = page.Item["Summary"]?.ToString(); 474 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 475 btnViewResult.Id = "pageId_" + page.ID; 476 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 477 if (page.Item["Date"] != null) 478 { 479 strDate = (DateTime) page.Item["Date"]; 480 } 481 482 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 483 if (jpgIndex != -1) 484 { 485 strImage = strImage.Substring(0, jpgIndex + 4); 486 } 487 488 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 489 imageList.Add(featuredListImage); 490 491 492 if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 493 { 494 badgeTheme = ""; 495 if (loopCounter % 6 == 2 || loopCounter % 6 == 4) 496 { 497 newsModolusClasslist = "col-lg-5"; 498 imageAspectRatio = "ratio-16x9"; 499 if (showAll) 500 { 501 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 502 } 503 } 504 else 505 { 506 newsModolusClasslist = "col-lg-3"; 507 imageAspectRatio = "ratio-16x9 ratio-lg-3x4"; 508 if (showAll) 509 { 510 imageAspectRatio = "ratio-3x4"; 511 } 512 } 513 514 loopCounter++; 515 } 516 517 518 <div class="@colClasslist @newsModolusClasslist"> 519 520 <a href="@btnViewResult.Url"> 521 <figure class="ratio @imageAspectRatio mb-0"> 522 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 523 </figure> 524 </a> 525 526 <div class="@cardClasslist"> 527 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events") 528 { 529 badgeTheme = "mb-5"; 530 } 531 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "events" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "news") 532 { 533 if (strDate != null) 534 { 535 var date = strDate; 536 var formattedDate = date.ToString("d. MMMM yyyy"); 537 538 <div class="badge mb-3 @badgeTheme"> 539 @formattedDate 540 </div> 541 } 542 } 543 544 @if (Model.Item.GetItem("Content").GetString("FeatureOptions") == "cases" || Model.Item.GetItem("Content").GetString("FeatureOptions") == "projects") 545 { 546 var selectedValues = page.Item["Type"].ToString(); 547 <div class="badge mb-5 mr-3 @badgeTheme"> 548 @ContentService.Instance.GetLabelForCaseType(selectedValues) 549 </div> 550 } 551 552 @{ 553 var badgeParms = new Dictionary<string, object>(); 554 badgeParms.Add("pageId", page.ID); 555 } 556 @RenderPartial("UserInterfaceModels/badge.cshtml", Model, badgeParms) 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
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.