Vi støtter

Hedeselskabet arbejder aktivt for naturen – nu og i fremtiden. Via vores overskud uddeler vi støtte til både store, visionære projekter og mindre, lokalt forankrede initiativer, der drives af passion og engagement. Til studerende, der rejser ud i verden for at lære mere om klimatilpasning, for at kunne udvikle optimale løsninger i Danmark. Til den lokale formand for borgerforeningen, der gerne vil skabe plads til mere liv på landsbyens grønne arealer. Eller til kommunen, der ønsker at forbedre det marine miljø og øge biodiversiteten i havet med et stenrev. Ambitionerne kan være mange, store og små.

Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Funding.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 70
   at Dalgas.Custom.Services.ContentRelationService.GetAllFundings(Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 704
   at CompiledRazorTemplates.Dynamic.RazorEngine_ff6db4b87c6547ff8fadd9bc4c49f0d7.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Funding.cshtml:line 144
   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(string.Empty); 132 ClassList colClasslist = new ClassList("js-content-container content-container col-12 mb-4"); 133 ClassList cardClasslist = new ClassList(string.Empty); 134 ClassList imageCardClasslist = new ClassList(string.Empty); 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 141 int numberOfItemsToShow = 999; 142 143 QueryResult queryResult = new QueryResult(); 144 queryResult = ContentRelationService.Instance.GetAllFundings(numberOfItemsToShow); 145 146 List<string> pageIds = new List<string>(); 147 pageIds.AddRange(queryResult.Results.Select(qrr => qrr["PageId"].ToString())); 148 149 string strTitle = string.Empty; 150 string strSummary = string.Empty; 151 string strImage = string.Empty; 152 string badgeTheme = string.Empty; 153 DateTime strDate = new DateTime(); 154 } 155 156 @{ 157 string contentType = Model.Item.GetItem("Content").GetString("Layout"); 158 159 switch (contentType) 160 { 161 case "simple": 162 rowWidthClasslist.Add("col-md-11 ms-auto"); 163 cardClasslist.Add("pt-3"); 164 165 break; 166 case "extended": 167 rowWidthClasslist.Add("col-md-10"); 168 colClasslist.Add("d-flex flex-column flex-md-row col-6 mb-6 justify-content-between"); 169 imageCardClasslist.Add("col-12 col-md-6"); 170 imageAspectRatio = "ratio-1x1"; 171 cardClasslist.Add("col-12 col-md-5 p-txt-container"); 172 break; 173 } 174 } 175 176 177 @if (queryResult.Results.Any()) 178 { 179 int loopCounter = 1; // Initialize loop counter for each group 180 181 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 182 <div class="container-xl"> 183 <div class="row justify-content-center"> 184 <div class="@rowWidthClasslist"> 185 <div class="js-dalgas-queryresult-container dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 186 187 @if (hasLead || hasText || hasHeading) 188 { 189 <div class="js-content-container content-container col-12 mb-3"> 190 191 <div class="col-lg-8"> 192 <span> 193 @string.Join("", headings.Select(h => h.ToString())) 194 </span> 195 196 @if (!string.IsNullOrEmpty(lead)) 197 { 198 <p class="lead">@lead</p> 199 } 200 201 @text 202 203 </div> 204 </div> 205 } 206 207 @{ 208 ButtonViewModel btnViewResult = new ButtonViewModel 209 { 210 Text = Translate("View more"), 211 Type = ButtonType.Link, 212 DisplayType = ButtonDisplayType.Link 213 }; 214 } 215 216 <div class="row @(contentType == "simple" ? "dalgas-featured-list-mobile-horizontal-scroll" : "mt-5") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist mt-2"> 217 218 @foreach (string pageId in pageIds) 219 { 220 if (int.TryParse(pageId, out int intPageId) && intPageId == PageView.Current().Page.ID) 221 { 222 continue; 223 } 224 225 switch (contentType) 226 { 227 case "simple": 228 229 if (loopCounter % 3 == 2) 230 { 231 newsModolusClasslist = "col-lg-5"; 232 imageAspectRatio = "ratio-3x4 ratio-custom-news"; 233 } 234 else 235 { 236 newsModolusClasslist = "col-lg-3"; 237 imageAspectRatio = "ratio-3x4"; 238 } 239 240 break; 241 case "extended": 242 243 btnViewResult.DisplayType = ButtonDisplayType.Primary; 244 if (loopCounter % 2 != 0) 245 { 246 imageCardClasslist.Add("order-md-last"); 247 } 248 else 249 { 250 imageCardClasslist.Remove("order-md-last"); 251 } 252 253 break; 254 } 255 256 Page page = Services.Pages.GetPage(intPageId); 257 258 if (page == null) 259 { 260 continue; 261 } 262 263 strTitle = page.Item["Title"]?.ToString(); 264 strSummary = page.Item["Summary"]?.ToString(); 265 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 266 btnViewResult.Id = "pageId_" + page.ID; 267 btnViewResult.Url = "/Default.aspx?ID=" + page.ID; 268 269 if (page.Item["ApplicationDeadline"] != null) 270 { 271 strDate = (DateTime) page.Item["ApplicationDeadline"]; 272 } 273 274 ButtonViewModel btnhowToApplyLink = new ButtonViewModel 275 { 276 Text = Translate("This is how you apply"), 277 Type = ButtonType.Link, 278 DisplayType = ButtonDisplayType.Secondary, 279 Url = page.Item["HowToApplyLink"]?.ToString() 280 }; 281 282 featuredListImage = ViewModelFactory.CreateFieldFileValueView(strImage); 283 284 <div class="@colClasslist @newsModolusClasslist"> 285 286 <div class="@imageCardClasslist"> 287 288 <figure class="ratio @imageAspectRatio @(loopCounter == 1 && contentType == "extended" ? "mb-lg-6" : "mb-0")"> 289 @if (loopCounter == 1 && contentType == "extended") 290 { 291 <div class="fifth-element size-2 d-none d-lg-flex bottom-lg-0 right-0 ob-lg-50 @fifthElementTheme"> 292 <div> 293 <span>@ReadFile(fifthElementIconPath + "lotus.svg")</span> 294 <span>@ReadFile(fifthElementIconPath + "snow.svg")</span> 295 </div> 296 </div> 297 } 298 <a href="@btnViewResult.Url"> 299 @RenderPartial("Components/Image.cshtml", featuredListImage ?? new FileViewModel()) 300 </a> 301 </figure> 302 303 </div> 304 305 <div class="@cardClasslist"> 306 307 @{ 308 if (strDate != null && page.Item["ApplicationDeadline"] != null) 309 { 310 var date = strDate; 311 var formattedDate = date.ToShortDateString(); 312 313 <div class="badge mb-4 @badgeTheme"> 314 @Translate("Application deadline", "Ansøgningsfrist:") @formattedDate 315 </div> 316 } 317 } 318 319 <h3 class="h4"> 320 <a href="@btnViewResult.Url" class="text-decoration-none"> 321 @strTitle 322 </a> 323 </h3> 324 @if (strSummary != null) 325 { 326 <span class="small">@strSummary</span> 327 } 328 329 @if (contentType == "extended") 330 { 331 <div class="mt-4 d-flex flex-row flex-wrap gap-3"> 332 @RenderModel(btnViewResult) 333 @RenderModel(btnhowToApplyLink) 334 </div> 335 } 336 else 337 { 338 <div class="mt-2 d-flex flex-row flex-wrap gap-3"> 339 @RenderModel(btnViewResult) 340 </div> 341 } 342 </div> 343 </div> 344 loopCounter++; 345 } 346 </div> 347 348 @if (hasButton) 349 { 350 <div class="js-content-container content-container col-12 mt-3"> 351 352 <div class="d-flex flex-wrap gap-3"> 353 @foreach (ButtonViewModel button in buttons) 354 { 355 @button 356 } 357 </div> 358 359 </div> 360 } 361 362 </div> 363 </div> 364 </div> 365 </div> 366 367 </section> 368 } 369 else 370 { 371 if (Pageview.IsVisualEditorMode) 372 { 373 <div class="container-xl alert alert-danger" role="alert"> 374 This <strong>@Model.Item.SystemName</strong> is empty 375 </div> 376 } 377 } 378

Medlemsudvalget

Hedeselskabets medlemsudvalg er nedsat af bestyrelsen til at varetage medlemmernes interesser og arbejder blandt andet med at kortlægge mulighederne for at støtte projekter og aktiviteter i overensstemmelse med Hedeselskabets formålsparagraf.

Medlemsudvalget består af:

  • Janus Skak Olufsen, formand for repræsentantskabet og formand for medlemsudvalget
  • John Nielsen, næstformand for repræsentantskabet
  • Bolette van Ingen Bro, udpeget af Hedeselskabets bestyrelse


Du er altid velkommen til at fremsende forslag til mulige projekter til os på info@hedeselskabet.dk

Om Hedeselskabet

I 1866 var Enrico Dalgas med til at grundlægge foreningen Hedeselskabet, og sammen med en gruppe driftige mænd hjalp han hedebønderne med at gøre den stride hede til frugtbar landbrugsjord.

Lige siden har vi skabt grøn innovation og sat gode spor i landskabet. I dag udvikler og leverer Hedeselskabet løsninger og ydelser, der med naturen som omdrejningspunkt bidrager til at bekæmpe og afbøde klimaforandringer til gavn for både biodiversitet og samfund.

Dine medlemsfordele

Hedeselskabets forening er et fællesskab med dedikerede medlemmer med interesse for benyttelse og beskyttelse af naturen. Der er mange gode grunde til at være medlem af Hedeselskabet – her har du fire af dem:

Netværk

Som medlem bliver du en del af et stærkt, fagligt interessefællesskab, som består af en bred kreds af fagfolk, beslutningstagere, studerende og andre med interesse for natur, klima, bæredygtighed og biodiversitet.

Viden

Som medlem modtager du Hedeselskabets magasin VÆKST fire gange årligt. Du får i VÆKST ny viden og faglig indsigt i naturpleje, klimatilpasning, bæredygtighed og biodiversitet samt adgang til fysiske og digitale arrangementer og digitale platforme.

Oplevelser

Som medlem kan du deltage i Hedeselskabets mange arrangementer. De er gratis for medlemmer og giver faglig viden, indsigt, netværk med ligesindede samt mulighed for at deltage på en årlig jagt og en fisketur.

Indflydelse

Som medlem kan du foreslå, hvilke projekter Hedeselskabet skal støtte med midler fra medlemspuljen, ligesom du selv kan søge midler. Du har også mulighed for at stemme, når der er valg til Hedeselskabets repræsentantskab, som er vores øverste myndighed.