Medlemspuljen
Knæfald for citronsommerfuglen i Skødstrup
Tre gæve mænd går på en kold januardag i knæ for citronsommerfuglen. Ja, det virker lidt surrealistisk, at et knæfald kan forbedre levevilkårene og øge antallet af citronsommerfugle, men det er nu en gang fakta for de tre mænds arbejde på et ryddet areal mellem Grenåbanen og virksomheden Carletti i Skødstrup. Den nye biotop er opført med støtte fra Hedeselskabets medlemspulje.
Initiativtageren, biolog Mogens Hvid, havde fået den idé, at en del af arealets bevoksning af rødgran skulle falde og erstattes af 150 tørstetræer. Tørst har den særlige egenskab, at træet tiltrækker de specialiserede citronsommerfugle, der kun lægger æg på træer i den slægt, som tørst tilhører. Mogens har lokal opbakning til projektet og har i gruppen Citronsommerfuglens Venner især fået hjælp fra to andre lokale ildsjæle, Jan Groth-Berntsen og Frans Helmer-Petersen.
Arealet er ejet af Carletti A/S, som i foråret 2022 blev præsenteret for ideen, fandt den spændende og gav straks tilladelse til rydning af arealet. Nu kan de glæde sig over de nye tiltag, hvor Citronsommerfuglenes Venner de næste år vil tilse og vedligeholde den nye bevoksning, som anlægsgartnere fra HedeDanmark plantede kort før jul.
Da Hedeselskabets lokale ambassadør, Hother Hennings, besøgte stedet var Mogens Hvid med hjælpere i gang med udlægning af beskyttende planteplader omkring træerne.
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Quote.cshtml" System.IO.IOException: There is not enough space on the disk. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count) at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer) at System.IO.FileStream.Dispose(Boolean disposing) at System.IO.Stream.Close() at System.IO.StreamWriter.Dispose(Boolean disposing) at System.IO.TextWriter.Dispose() at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost) at RazorEngine.Roslyn.CSharp.RoslynCompilerServiceBase.CompileType(TypeContext context) at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType) at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType) at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss) 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 @using System 2 @using System.Collections.Generic 3 @using System.Linq 4 @using Dynamicweb.Content 5 @using Dynamicweb.Frontend 6 @using Dalgas.Custom.Services 7 @using Dalgas.Custom.ViewModels.UI 8 @using Dynamicweb.Core.Json 9 @using Dynamicweb.Ecommerce.ProductCatalog 10 @using Dynamicweb.Indexing.Querying 11 @using Dynamicweb.Indexing.Querying.Faceting 12 @using Dynamicweb.Indexing.Querying.Sorting 13 @using Dynamicweb.Modules 14 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 15 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.GridRowViewModel> 16 17 @using System 18 @using System.Collections.Generic 19 @using System.Linq 20 @using Dalgas.Custom.ViewModels.UI 21 @using Dynamicweb.Content 22 @using Dynamicweb.Ecommerce.ProductCatalog 23 @using Dynamicweb.Frontend 24 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 25 26 @*TODO: Move these functions onto the model *@ 27 28 @functions 29 { 30 31 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 32 { 33 var returnValues = new List<string> 34 { 35 $"item_{model.Item.SystemName.ToLower()}" 36 }; 37 38 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 39 { 40 returnValues.Add("dalgas-section-first-on-page"); 41 } 42 43 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 44 45 if (!string.IsNullOrEmpty(overwriteTheme)) 46 { 47 sectionBackgroundTheme = overwriteTheme; 48 } 49 50 // Add theme class if it exists 51 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 52 { 53 if (sectionBackgroundTheme.Contains("default")) 54 { 55 returnValues.Add("theme theme-light"); 56 } 57 else 58 { 59 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 60 } 61 } 62 63 // Determine if top padding should be removed 64 65 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 66 67 returnValues.Add("pb-6"); 68 if (removeTopPadding != "enable") 69 { 70 returnValues.Add("pt-6"); 71 } 72 73 return string.Join(" ", returnValues); 74 } 75 76 } 77 78 79 @{ 80 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 81 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 82 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 83 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 84 85 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 86 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 87 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 88 bool hasHeading = headings.Any(); 89 bool hasButton = buttons.Any(); 90 91 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 92 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 93 94 var sectionClassList = GetSectionClassList(Model); 95 96 var image = string.Empty; 97 var imageParameters = new Dictionary<string, object>(); 98 99 string layout = string.Empty; 100 Boolean enableFifthElement = false; 101 if (Model?.Item != null) 102 { 103 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 104 105 if (paragraphLayout != null) 106 { 107 layout = paragraphLayout.GetString("Layout"); 108 109 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 110 } 111 } 112 113 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 114 { 115 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 116 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 117 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 118 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 119 string cssPosition = $"{xPos}% {yPos}%"; 120 imageParameters.Add("style", "object-position:" + cssPosition); 121 } 122 123 LinkViewModel imageLink = new LinkViewModel(); 124 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 125 { 126 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 127 } 128 129 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 130 } 131 132 133 @{ 134 var fifthElementShape = Model.Item.GetItem("Paragraph_Layout")?.GetItem("FifthElementShape")?.GetString("FifthElement").ToLower(); 135 136 if (string.IsNullOrEmpty(fifthElementShape)) 137 { 138 fifthElementShape = "canopy"; 139 } 140 141 ClassList rowBleedClassList = new ClassList(""); 142 ClassList containerBleedClassList = new ClassList(""); 143 ClassList fifthElementClasslist = new ClassList(""); 144 ClassList textClasslist = new ClassList(""); 145 146 textClasslist.Add("pt-xxl-6"); 147 if (layout == "right") 148 { 149 containerBleedClassList.Add("me-lg-0 pe-lg-0"); 150 rowBleedClassList.Add("justify-content-end"); 151 fifthElementClasslist.Add("os-50"); 152 textClasslist.Add("offset-md-6"); 153 } 154 else if (layout == "left") 155 { 156 fifthElementClasslist.Add("oe-50 right-0"); 157 containerBleedClassList.Add("ms-lg-0 ps-lg-0"); 158 rowBleedClassList.Add("justify-content-start"); 159 } 160 161 // Call the function with the updated sectionClassList 162 sectionClassList = GetSectionClassList(Model, "theme-light"); 163 sectionClassList = sectionClassList.Replace("pt-6", string.Empty).Replace(" ", " ").Trim(); 164 165 string quote = Model.Item?.GetItem("Content")?.GetString("Text"); 166 string name = Model.Item?.GetItem("Content")?.GetString("Name"); 167 string titleAndCompany = Model.Item?.GetItem("Content")?.GetString("TitleAndCompany"); 168 } 169 170 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 171 <div class=""> 172 173 @if (!string.IsNullOrEmpty(text) || !string.IsNullOrEmpty(name) || !string.IsNullOrEmpty(titleAndCompany)) 174 { 175 <div class="container-xl @containerBleedClassList"> 176 <div class="row @rowBleedClassList"> 177 <div class="col-12 col-lg-11"> 178 <div class="row"> 179 <div class="col-12"> 180 181 <div class="theme @theme position-relative overflow-hidden align-content-end"> 182 183 <div class="row"> 184 <div class="js-content-container p-txt-container content-container col-12 col-lg-10 col-xl-9 col-xxxl-7 mx-auto p-4 p-lg-5 pt-6" style="z-index: 1"> 185 186 <div class="col-12 col-lg-7 @textClasslist"> 187 188 <p class="quote">"@quote"</p> 189 <h4 class="mb-2">@name</h4> 190 <p class="small">@titleAndCompany</p> 191 192 </div> 193 </div> 194 195 </div> 196 197 <figure class="ratio top-0 position-absolute h-100 mb-0 d-none d-lg-block"> 198 <div class="fifth-element w-100 h-100 @fifthElementClasslist @fifthElementTheme"> 199 @ReadFile(fifthElementIconPath + fifthElementShape + ".svg") 200 </div> 201 </figure> 202 203 </div> 204 205 </div> 206 </div> 207 </div> 208 </div> 209 </div> 210 } 211 else 212 { 213 if (Pageview.IsVisualEditorMode) 214 { 215 <div class="container-xl alert alert-danger" role="alert"> 216 This <strong>@Model.Item.SystemName</strong> is empty 217 </div> 218 } 219 } 220 </div> 221 </section> 222
Mere biodiversitet
Formålet er primært oprettelse af en biotop for citronsommerfuglen, men også skovblåfugl og andre insekter er knyttet til tørstetræet.
”Hedeselskabets medlemspulje er målrettet naturprojekter, som samtidig har en stærk lokal forankring og samarbejde. Det må man sige er tilfældet i projektet her, hvor der er samarbejde med lokale initiativtagere, frivillige og en virksomhed. Det er guld værd for et lokalsamfund, at nogle går i front og samtidig gør en indsats for at øge biodiversiteten i området,” siger Hother Hennings, medlem af Hedeselskabet og Hedeselskabets ambassadør for lokalområdet.
Biolog Mogens Hvid (tv) orienterer Hedeselskabets lokale ambassadør, Hother Hennings, om etablering af biotopen til citronsommerfuglen.
Hvor blev rødgranen af?
Og de fældede rødgran og andre træer? De er samlet i bunker og vil tjene som skjul for insekter, fugle og smådyr de kommende år, f.eks. gærdesmutter og pindsvin.
Mogens Hvid er medlem af Hedeselskabet og har fået 25.000 kroner til projektet via Hedeselskabets medlemspulje.
Citronsommerfuglenes Venner
Jan Groth-Berntsen, frivillig i Citronsommerfuglenes Venner, er i gang med udlægning af beskyttende plantemåtter omkring et af tørstetræerne. Måtten, der på overfladen er lavet af kokosfibre, holder ukrudt nede, så de nyplantede træer får optimale vækstbetingelser. Bagsiden af måtten er lavet af bioplast, der forgår af sig selv i naturen.
Øverst på siden ses en anden af de frivillige, Frans Helm-Petersen (th), der sammen med Jan Groth-Berntsen sorterer de fældede rødgran i efteråret 2022.
Flere tidligere uddelinger
Bevar de naturlige levesteder
Midtjysk Jagthunde Klub er en aktiv medspiller i projektet ’Mere Natur i Agerlandskabet’, der er et projekt til gavn for agerlandsnaturen og naturbrugere i Skive og Viborg Kommune.
Kilden er åben i Vejrumbro
Foreningen Vejrumbros Venner har stået i spidsen for åbningen af et stykke af kilden mellem Vejrumbro by og Nørreå. Ud over de rekreative muligheder der skabes, giver det også mulighed for at forbedre biodiversiteten.
Så fik Blackfoot-spejderne plantet 170 træer
I strålende efterårssol fik Blackfoot Blovstrød-spejderne plantet rigtig mange træer støttet af Hedeselskabets medlemspulje.Overskrift om 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.