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