Skovdrift
En optimeret skovdrift giver en sund og robust skov, en stærk vedproduktion og tilgodeser skovens herlighed, økonomi og biodiversitet. Derfor hjælper vi med at afklare driftsmulighederne for dig som skovejer. Og din lokale Dalgas-skovfoged er forankret i netop dit lokalområde.
Effektiv skovforvaltning gennem faglig rådgivning
En skov består af mange forskellige og varierede arealer med hver deres potentiale inden for skovdrift, biodiversitet, naturoplevelser, jagt og klima.
For at du som skovejer kan få opfyldt dine mål med skoven, er det vigtigt at kende både udgangspunkt og potentiale i skoven. Faglig rådgivning om de forskellige muligheder giver dig de bedste forudsætninger for at træffe de rette beslutninger og opnå dine mål med skovdriften.
Dalgas giver dig valgmulighederne – du træffer beslutningen
Vi giver råd, vejledning og faglig sparring på forskellige niveauer. Der er mange beslutninger at tage, når man driver en skov. Hos os har du en faglig sparringspartner, der altid arbejder ud fra dine ønsker til skoven og dens udvikling, sundhed og værdi.
Fagligt velfunderede skovfogeder lokalt placeret i hele landet skaber den gode og personlige relation, der styrker samarbejdet til gavn for dyrkning af din skov.
Ikke to skove er ens. Og der kan være stor forskel på det ønskede udbytte for eje og drift af skoven. Vi er specialiserede i at levere kundetilpassede løsninger, som møder præcis de ønsker og krav, du har til skovdriften.
De gode råd
Vi giver råd, vejledning og faglig sparring på forskellige niveauer. Der er mange beslutninger at tage, når man driver en skov. Hos os har du en faglig sparringspartner, der altid arbejder ud fra dine ønsker til skoven og dens udvikling, sundhed og værdi.
Den personlige relation
Fagligt velfunderede skovfogeder lokalt placeret i hele landet skaber den gode og personlige relation, der styrker samarbejdet til gavn for dyrkning af din skov.
Den kundetilpassede løsning
Ikke to skove er ens. Og der kan være stor forskel på det ønskede udbytte for eje og drift af skoven. Vi er specialiserede i at levere kundetilpassede løsninger, som møder præcis de ønsker og krav, du har til skovdriften.
Vi hjælper dig hele vejen
En bred vifte af services og løsninger inden for skovdrift.
Skovning og flis
Hvilken skovningsmetode passer bedst til min bevoksning? Hvilke effekter kan der produceres, og hvordan er markedssituationen lige nu? Skal jeg lave træeffekter eller flis? Få professionel hjælp hos Dalgas til at maksimere udbyttet af din skovning.
View moreSkovejer Fordelsprogram
Kender du potentialet i din skov? Ved du, hvordan du opnår dine mål med skoven? Og vil du gerne have et samlet overblik over din skovdrift? Så har vi gjort det nemt for dig med vores Skovejer Fordelsprogram.
View moreSkovcertificering
Få din skovdrift certificeret efter de internationalt anerkendte standarder PEFC (PEFC/09-22-005) og FSC® (FSC-C103859). Certificeringen er dokumentation for, at din skov drives bæredygtigt og ansvarligt.
View moreBiodiversitet i skoven
Skoven er hjemsted for en lang række organismer. Alt fra svampe og planter til insekter og dyreliv.
View moreSkovportalen - mere tid i skoven, mindre på kontoret
Skovportalen er det digitale omdrejningspunkt i samarbejdet om din skov.
Dialogen med din lokale skovfoged er det vigtigste, men med Skovportalen har du og skovfogeden et og samme sted, hvor alle vigtige data og oplysninger om skoven og dens drift er samlet.
Du kan tilgå Skovportalen, hvor og hvornår du vil, fra computer, tablet eller og smartphone. Altid opdateret – altid tilgængelig.
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Slider.cshtml" System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Dalgas.Custom.Services.ContentRelationService.GetRelatedPagesByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in C:\Data\Development\git\Dalgas-hs\Custom\Services\ContentRelationService.cs:line 68 at Dalgas.Custom.Services.ContentRelationService.GetCaseCustomerStoriesByCurrentCase(Int32 pageSize) in C:\Data\Development\git\Dalgas-hs\Custom\Services\ContentRelationService.cs:line 391 at CompiledRazorTemplates.Dynamic.RazorEngine_be0bca8f6ab44c29a8dd4645ebc84749.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Slider.cshtml:line 135 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<GridRowViewModel> 2 @using System.Web 3 @using Dalgas.Custom.Services 4 @using Dalgas.Custom.ViewModels.UI 5 @using Dynamicweb.Content 6 @using Dynamicweb.Frontend 7 @using Dynamicweb.Ecommerce.ProductCatalog 8 @using Page = Dynamicweb.Content.Page 9 10 @using System 11 @using System.Collections.Generic 12 @using System.Linq 13 @using Dalgas.Custom.ViewModels.UI 14 @using Dynamicweb.Content 15 @using Dynamicweb.Ecommerce.ProductCatalog 16 @using Dynamicweb.Frontend 17 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 18 19 @*TODO: Move these functions onto the model *@ 20 21 @functions 22 { 23 24 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 25 { 26 var returnValues = new List<string> 27 { 28 $"item_{model.Item.SystemName.ToLower()}" 29 }; 30 31 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 32 { 33 returnValues.Add("dalgas-section-first-on-page"); 34 } 35 36 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 37 38 if (!string.IsNullOrEmpty(overwriteTheme)) 39 { 40 sectionBackgroundTheme = overwriteTheme; 41 } 42 43 // Add theme class if it exists 44 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 45 { 46 if (sectionBackgroundTheme.Contains("default")) 47 { 48 returnValues.Add("theme theme-light"); 49 } 50 else 51 { 52 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 53 } 54 } 55 56 // Determine if top padding should be removed 57 58 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 59 60 returnValues.Add("pb-6"); 61 if (removeTopPadding != "enable") 62 { 63 returnValues.Add("pt-6"); 64 } 65 66 return string.Join(" ", returnValues); 67 } 68 69 } 70 71 72 @{ 73 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 74 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 75 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 76 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 77 78 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 79 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 80 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 81 bool hasHeading = headings.Any(); 82 bool hasButton = buttons.Any(); 83 84 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 85 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 86 87 var sectionClassList = GetSectionClassList(Model); 88 89 var image = string.Empty; 90 var imageParameters = new Dictionary<string, object>(); 91 92 string layout = string.Empty; 93 Boolean enableFifthElement = false; 94 if (Model?.Item != null) 95 { 96 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 97 98 if (paragraphLayout != null) 99 { 100 layout = paragraphLayout.GetString("Layout"); 101 102 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 103 } 104 } 105 106 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 107 { 108 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 109 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 110 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 111 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 112 string cssPosition = $"{xPos}% {yPos}%"; 113 imageParameters.Add("style", "object-position:" + cssPosition); 114 } 115 116 LinkViewModel imageLink = new LinkViewModel(); 117 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 118 { 119 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 120 } 121 122 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 123 } 124 125 126 @{ 127 string strTitle = string.Empty; 128 string strSummary = string.Empty; 129 string strImage = string.Empty; 130 string strLink = string.Empty; 131 132 var sliderTheme = Model.Item.GetString("SliderColorScheme"); 133 Page currentPage = PageView.Current().Page; 134 135 var queryResult = ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentCase(); 136 object pageParentPageIdValue = null; 137 138 IList<ItemViewModel> sliderItems = Model.Item?.GetItem("Content")?.GetItems("Items") ?? Enumerable.Empty<ItemViewModel>().ToList(); 139 140 // Fetch PageParentPageId from queryResult 141 if (!sliderItems.Any() && queryResult != null && queryResult.Results.Any()) 142 { 143 pageParentPageIdValue = queryResult.Results.FirstOrDefault(dict => dict.ContainsKey("PageParentPageId"))?["PageParentPageId"]; 144 } 145 146 // Fetch PageParentPageId from sliderItems if it wasn't set by queryResult 147 if (pageParentPageIdValue == null && Model.Item != null && sliderItems.Any()) 148 { 149 string linkString = sliderItems?.FirstOrDefault()?.GetString("Link"); 150 151 if (!string.IsNullOrEmpty(linkString) && int.TryParse(linkString, out int sliderItemLink)) 152 { 153 int sliderItemParentPage = Services.Pages.GetPage(sliderItemLink).ParentPageId; 154 pageParentPageIdValue = sliderItemParentPage; 155 } 156 else 157 { 158 // Handle the case where linkString is not a valid integer or is null/empty 159 pageParentPageIdValue = null; // or assign a default value or handle error 160 } 161 } 162 163 ButtonViewModel btnViewModelViewAll = new ButtonViewModel 164 { 165 Id = "pageId_", 166 Url = "/Default.aspx?ID=" + pageParentPageIdValue, 167 Text = Translate("View all"), 168 Type = ButtonType.Link, 169 DisplayType = ButtonDisplayType.Secondary 170 }; 171 } 172 173 @{ 174 175 bool showImageOnly = true; // Assume showImageOnly is true initially 176 177 List<FileViewModel> imageList = new List<FileViewModel>(); // List to hold images for the modal 178 179 // Check if any title exists 180 var items = sliderItems.Any() ? sliderItems.Cast<object>() : queryResult.Results.Cast<object>(); 181 182 foreach (var item in items) 183 { 184 var resultDictionary = item as Dictionary<string, object>; 185 Page page = null; 186 if (resultDictionary != null && resultDictionary.TryGetValue("PageId", out object pageIdObj)) 187 { 188 if (int.TryParse(pageIdObj.ToString(), out int resultPageId)) 189 { 190 page = Services.Pages.GetPage(resultPageId); 191 } 192 } 193 194 string title = item is ItemViewModel sliderItem 195 ? sliderItem.GetString("Title") 196 : page?.Item["Title"].ToString(); 197 198 if (!string.IsNullOrEmpty(title)) 199 { 200 showImageOnly = false; 201 break; 202 } 203 } 204 205 FileViewModel sliderImage; 206 } 207 208 @if (queryResult.Results.Any() || sliderItems.Count > 0) 209 { 210 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 211 <div class="container-xl"> 212 <div class="row justify-content-center"> 213 <div class="col-12 col-lg-10"> 214 <div class="row"> 215 <div class="col-12 col-lg-6 mb-4"> 216 @if (!string.IsNullOrEmpty(Model.Item.GetItem("Content").GetString("Title"))) 217 { 218 <h2 class="mb-0 mb-lg-5">@Model.Item.GetItem("Content").GetString("Title")</h2> 219 } 220 @if (queryResult.Results.Count > 1 || sliderItems.Count > 1) 221 { 222 <div class="d-none d-lg-flex gap-3"> 223 <button type="button" title="@Translate("Previous slide")" class="dalgas-swiper-button-prev" style="z-index:1;"> 224 <span class="visually-hidden">@Translate("Previous slide")</span> 225 </button> 226 <button type="button" title="@Translate("Next slide")" class="dalgas-swiper-button-next" style="z-index:1;"> 227 <span class="visually-hidden">@Translate("Next slide")</span> 228 </button> 229 @if (showImageOnly) 230 { 231 <button type="button" class="btn btn-link no-arrow ms-2" data-bs-toggle="modal" data-bs-target="#imageOnlyModal"> 232 Se alle billeder 233 </button> 234 } 235 </div> 236 } 237 </div> 238 <div class="col-12 col-lg-6 mb-4 d-inline-flex justify-content-end align-items-end d-none d-lg-flex"> 239 240 @if (sliderItems.Any() && !showImageOnly || queryResult.Results.Any() && !showImageOnly) 241 { 242 @RenderModel(btnViewModelViewAll) 243 } 244 </div> 245 <div class="swiper-container row" data-show-image-only="@showImageOnly.ToString().ToLower()"> 246 <div class="swiper-wrapper"> 247 @{ 248 ButtonViewModel btnViewResult = new ButtonViewModel 249 { 250 Text = Translate("View the case story"), 251 Type = ButtonType.Link, 252 DisplayType = ButtonDisplayType.Secondary 253 }; 254 255 foreach (var result in items.Select((item, index) => new { Item = item, Index = index + 1 })) 256 { 257 strTitle = string.Empty; 258 strSummary = string.Empty; 259 strImage = string.Empty; 260 strLink = string.Empty; 261 262 if (sliderItems.Any()) 263 { 264 var sliderItem = result.Item as ItemViewModel; 265 strTitle = sliderItem.GetString("Title"); 266 strSummary = sliderItem.GetString("Summary"); 267 strImage = sliderItem.GetString("Image"); 268 strLink = sliderItem.GetString("Link"); 269 btnViewResult.Id = "pageId_" + strLink; 270 btnViewResult.Url = "/Default.aspx?ID=" + strLink; 271 } 272 else if (queryResult.Results.Any()) 273 { 274 var resultDictionary = result.Item as Dictionary<string, object>; 275 if (resultDictionary != null && resultDictionary.TryGetValue("PageId", out var pageIdObj) && int.TryParse(pageIdObj.ToString(), out int resultPageId)) 276 { 277 Page page = Services.Pages.GetPage(resultPageId); 278 strTitle = page.Item["Title"]?.ToString(); 279 strSummary = page.Item["Summary"]?.ToString(); 280 strImage = page.Item["CoverImage"]?.ToString(); 281 btnViewResult.Id = "pageId_" + resultPageId; 282 btnViewResult.Url = "/Default.aspx?ID=" + resultPageId; 283 } 284 } 285 286 sliderImage = ViewModelFactory.CreateFieldFileValueView(strImage); 287 imageList.Add(sliderImage); // Add image to the list for the modal 288 289 <div class="swiper-slide d-flex flex-column"> 290 <div class="d-flex flex-column flex-column-reverse flex-md-row h-100"> 291 @if (showImageOnly == false) 292 { 293 <div class="col-md-6 theme @sliderTheme p-4 pt-5 p-lg-5 d-flex flex-column justify-content-between h-100"> 294 <div> 295 <h3> 296 <a class="text-decoration-none" href="@btnViewResult.Url">@strTitle</a> 297 </h3> 298 <p class="small">@strSummary</p> 299 </div> 300 <div> 301 @RenderModel(btnViewResult) 302 </div> 303 </div> 304 } 305 <div class="@(showImageOnly == false ? "col-md-6" : "col-md-12")"> 306 @if (showImageOnly) 307 { 308 <a href="#" data-bs-toggle="modal" data-bs-target="#imageOnlyModal"> 309 <figure class="ratio ratio-16x9 ratio-lg-4x3 h-100"> 310 @RenderPartial("Components/Image.cshtml", sliderImage ?? new FileViewModel()) 311 </figure> 312 </a> 313 } 314 else 315 { 316 <a href="@btnViewResult.Url"> 317 <figure class="ratio ratio-16x9 ratio-lg-4x3 h-100"> 318 @RenderPartial("Components/Image.cshtml", sliderImage ?? new FileViewModel()) 319 </figure> 320 </a> 321 } 322 </div> 323 </div> 324 <div class="d-flex pagination mt-3"> 325 @result.Index/@items.Count() 326 </div> 327 </div> 328 } 329 } 330 </div> 331 </div> 332 </div> 333 </div> 334 </div> 335 </div> 336 </section> 337 } 338 else 339 { 340 if (Pageview.IsVisualEditorMode) 341 { 342 <div class="container-xl alert alert-danger" role="alert"> 343 This <strong>@Model.Item.SystemName</strong> is empty 344 </div> 345 } 346 } 347 348 @if (showImageOnly) 349 { 350 <div class="modal fade" id="imageOnlyModal" tabindex="-1" aria-labelledby="imageOnlyModalLabel" aria-hidden="true" data-lenis-prevent> 351 <div class="modal-dialog modal-fullscreen"> 352 <div class="modal-content"> 353 <div class="modal-header"> 354 <h4 class="modal-title">@PageView.Current().Item["Title"]</h4> 355 <button type="button" class="btn" data-bs-dismiss="modal" aria-label="Close"> 356 @{ 357 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/dalgas/x.svg"; 358 359 if (!iconPath.ToLower().Contains("none") && iconPath != "") 360 { 361 <span class="icon-3 pe-none"> 362 @ReadFile(iconPath) 363 </span> 364 } 365 } 366 </button> 367 </div> 368 <div class="modal-body"> 369 <div class="masonry-container"> 370 @for (int i = 0; i < imageList.Count; i++) 371 { 372 <figure class="masonry-item"> 373 @RenderPartial("Components/Image.cshtml", imageList[i]) 374 </figure> 375 } 376 </div> 377 </div> 378 </div> 379 </div> 380 </div> 381 } 382
Kontakt din lokale skovfoged
Get Contacted
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.
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.