KAFFEVIDEN

Mountain: Smagen af kaffe jorden rundt

Der dyrkes kaffe i mere end 80 lande langs Ækvator. Og fordi kaffe tager smag af vind og vejr, jordbundsforhold, solskinstimer og meget mere, så tager din kaffe også smag af sit oprindelsesland!

I BKI Professionels premiumserie, Mountain, finder du en lang række single origin kaffevarianter fra rundt omkring i verden. Så tag på en spændende smagsrejse sammen med os!

verdenskort viser smagen af kaffe jorden rundt

Mountain Brasil Kaffe

Mørkristet arabica 
Flot og blød krop
Rene noter af frugt og chokolade

Brasilien er verdens største kaffeproducent

Brasilien

Brasilien er verdens største kaffeproducent. Det var også her, at Svend Mathiesen, grundlæggeren af BKI, opstartede sin første import af kaffebønner - deraf navnet Brasil Kaffe Import. I 1920 dyrkede Brasilien faktisk 80% af al verdens kaffe, og selvom den andel i dag er nede på ca. 35%, så har udkommet af den årlige høst fortsat enorm indflydelse på verdensmarkedets kaffepriser. 

80% af al kaffe, der dyrkes i Brasilien, er Arabica bønner, og selvom man her kan finde brug af et væld af forskellige behandlingsmetoder, er Brasilien særlig kendt for vasket arabica kaffe (våd metode) med en blød og rund smag, samt naturlig kaffe (tør metode) med en behagelig sødme, en mild syre og mellem fylde. 

Indonesien/Java

Teknisk set er Javakaffe en betegnelse for kaffe dyrket på øen Java. I dag er grænserne dog visket ud, og man bruger nu betegnelsen om al kaffe, der produceres i Indonesien, hvilket udgør ca. 7% af verdensmarkedet. 

Ca. 90% af al kaffe fra Java er robusta kaffe af høj kvalitet, som primært vaskes. Kaffen har generelt en lav syrlighed, en tung krop og blide nøddeagtige toner. Denne type Javakaffe er særlig populær til espressobønner og blends, da den giver kaffen en god fylde og en flot crema på espresso. 

Mountain Java Mørk

Blend fra Indonesien, Brasilien og Colombia 
Kraftig og fyrig
Noter af mørk chokolade og brændte mandler

Colombia

Colombia står ca. for 6% af verdens kaffeproduktion. Colombias mange bjerge skaber store klimatiske forskelle, og giver derfor kaffen forskellige kvaliteter alt afhængig af, hvor i landet den er dyrket. Man dyrker og producerer dog udelukkende vasket arabica kaffe i Colombia.

En stor del af landets bedste bønner dyrkes på bjergskråninger omkring hovedstaden Bogotá. Her er jorden fed og rig, og højderne gør luften fugtig. Tilsammen skaber det de optimale forhold for kaffedyrkning.

Kaffe fra Colombia er ofte med høj syre, stor fylde og blomstrede og frugtige noter, som særligt fremhæves i lys- og mellemristede bønner. 

Mountain Santos Colombia

Blend fra Colombia og Brasilien 
Balanceret fylde og let tør smag
Fin, syrlig og lang eftersmag

Colombiansk kaffe
Kenyansk kaffe

Kenya

Kenya producerer mindre end 0,5% af al kaffe i verden. Men hvad de mangler på kvantitet kompenserer de derimod for i kvalitet. Kenyansk kaffe er af meget høj kvalitet, og den er karakteriseret ved en komplet og kompleks smagsoplevelse. Mount Kenyas skråninger er optimale til kaffedyrkning, ligesom den karakteristiske røde og lerholdige jord i Kenya, rig på jern og aluminium, giver kaffen sit helt eget særpræg.

Kenyansk kaffe kendetegnes som meget aromatiske og næsten saftige i deres smag. De har ofte en intens syre, en fyldig krop og tydelige nuancer af solbær og citron. 

Al kaffe fra Kenya er arabica bønner, hvoraf det meste er vasket. I Kenya rangerer man desuden kaffe efter størrelse og kvalitet, hvoraf den fineste klassificering er AA. Dette betyder ensartede, store og hele bønner uden fejl og derfor en meget fin kvalitet og smag.

Mountain Kenya AA

Lysristede bønner af fineste kvalitet
Fyldig kaffe med høj syre
Tydelige noter af solbær og citrus

Etiopien

Etiopien regnes normalt for kaffens og arabica bønnens hjemland. Her findes et væld af forskellige kaffesorter, mange dyrkes vildt, og reelt har man endnu ikke det fulde overblik over plantediversiteten - for man finder til stadighed nye sorter! Kaffe er en af landets største eksportvarer, selvom produktionen i stor udtrækning foregår uden moderne hjælpemidler. Etiopien står for ca. 5% af verdensmarkedets kaffe.

Etiopisk kaffe opfattes af mange som noget af den fineste kaffe, der findes, grundet kaffens store diversitet og unikke smag.

Etiopisk kaffe er kendetegnet ved elegante og klare kaffer med en forfinet syre og tydelige blomster, urte- og citrusnoter. Særlig kendt er eks. kaffe dyrket i områderne Sidamo og Yirgacheffe.

Mountain Etiopisk Sidamo

Lysristede kaffebønner fra Sadimo-regionen
Vinøs og frugtig med noter af blåbær
Syrlig og blød krop

etiopisk kaffe

Guatemala

I Guatemala dyrkes kaffen i den sydlige del af landet, som har kyst mod Stillehavet. Terrænet er meget kuperet og består af både bjerge og vulkaner, ligesom her er mange mikroklimaer, der skaber et stort spænd i kaffesmagen. Op mod 98% af al kaffe fra Guatemala er arabica, som oftest vasket. Guatemala står samlet for ca. 2,5% af kaffen på verdensmarkedet.

Smagen kan spænde fra en sødlig og krydret kaffe med noter af kakao og karamel til kaffe med høj syrlighed og tydelige blomstrede noter.

Flere af vulkanerne i Guatemala er stadig aktive, og de jævnlige udbrud er med til at berige jorden, eks. omkring byen Antigua. Herfra er kaffen ofte velbalanceret, krydret og sødlig med noter af eks. kakao, chokolade, nødder og måske endda et røget strejf. 

Mountain Guatemala Antigua

Delikat og velbalanceret krop med høj syre
Røget, krydret og frugtig med chokoladenoter
Lysristet

Mountain Økologisk

Kaffebønner fra Chiapas i Mexico
Sødlig duft, let syre og stor dybde
Elegant og harmonisk 
Lysristet, økologisk arabica

Mexico

I Mexico dyrkes primært vasket arabica kaffe. De fleste kaffeplantager ligger i den sydlige del af landet, i området Chiapas, som ligger ud til Stillehavet. Mexicansk kaffe vinder popularitet i disse år og udvikler sig til mere og mere specialiserede markeder.

Mexicansk kaffe kendetegnes for sin sødmefuldhed, blide, milde og harmoniske smag, ligesom noter af stenfrugter og kakao er typisk for Chiapas-området.

kaffe fra peru

Peru

Ca. 3% af verdens kaffeproduktion stammer fra Peru. Det er primært vaskede arabica bønner, der dyrkes på Andesbjergenes skråninger.

Kaffe fra Peru er kendt som afbalanceret kvalitetskaffe med sødlige jord- og urteagtige noter.

Error executing template "Designs/Swift_custom/Paragraph/Swift_TextAndImage.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_5c7dcfc106a64cffaeb6aec61eadccfe.<>c__DisplayClass4_0.<RenderButtons>b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift_custom\Paragraph\Swift_TextAndImage.cshtml:line 289
   at CompiledRazorTemplates.Dynamic.RazorEngine_5c7dcfc106a64cffaeb6aec61eadccfe.Execute() in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift_custom\Paragraph\Swift_TextAndImage.cshtml:line 98
   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.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using S_DW_BKI_Swift.CustomModules.Extensions 4 5 @{ 6 Dynamicweb.Frontend.LinkViewModel link1 = new Dynamicweb.Frontend.LinkViewModel(); 7 Dynamicweb.Frontend.LinkViewModel link2 = new Dynamicweb.Frontend.LinkViewModel(); 8 9 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 10 string layout = Model.Item.GetRawValueString("Layout", "image-top"); 11 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 12 string contentPaddingClass = string.Empty; 13 string gapClass = " gap-3"; 14 15 switch (contentPadding) 16 { 17 case "small": 18 contentPaddingClass = " p-3"; 19 gapClass = " gap-0"; 20 break; 21 case "large": 22 contentPaddingClass = " p-5"; 23 gapClass = " gap-0"; 24 break; 25 } 26 } 27 28 <div class="d-flex flex-column@(gapClass) h-100 position-relative@(theme) item_@Model.Item.SystemName.ToLower()"> 29 <a id="@Model.ID" class="user-select-none position-absolute top-0" style="scroll-margin-top:var(--header-height,150px)"></a> 30 @switch (layout) 31 { 32 case "image-top": 33 @RenderImage() 34 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 35 { 36 <div class="d-flex flex-column gap-3 h-100@(contentPaddingClass)"> 37 @{ 38 @RenderTitle() 39 @RenderLead() 40 @RenderText() 41 @RenderButtons(link1, link2) 42 } 43 </div> 44 } 45 break; 46 47 case "title-top": 48 if (!string.IsNullOrEmpty(Model.Item.GetString("Title"))) 49 { 50 <div class="@(contentPaddingClass)"> 51 @{ @RenderTitle() } 52 </div> 53 } 54 @RenderImage() 55 if (!string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 56 { 57 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 58 @{ 59 @RenderLead() 60 @RenderText() 61 @RenderButtons(link1, link2) 62 } 63 </div> 64 } 65 break; 66 67 case "title-lead-top": 68 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead"))) 69 { 70 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 71 @{ 72 @RenderTitle() 73 @RenderLead() 74 } 75 </div> 76 } 77 @RenderImage() 78 if (!string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 79 { 80 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 81 @{ 82 @RenderText() 83 @RenderButtons(link1, link2) 84 } 85 </div> 86 } 87 break; 88 89 case "text-center": 90 @RenderImage() 91 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 92 { 93 <div class="d-flex flex-column gap-3 align-items-center text-center h-100@(contentPaddingClass)"> 94 @{ 95 @RenderTitle() 96 @RenderLead() 97 @RenderText() 98 @RenderButtons(link1, link2) 99 } 100 </div> 101 } 102 break; 103 104 case "image-bottom": 105 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 106 { 107 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 108 @{ 109 @RenderTitle() 110 @RenderLead() 111 @RenderText() 112 @RenderButtons(link1, link2) 113 } 114 </div> 115 } 116 @RenderImage() 117 break; 118 } 119 </div> 120 121 @helper RenderTitle() 122 { 123 bool hideTitle = Model.Item?.GetBoolean("HideTitle") ?? false; 124 string title = !hideTitle ? Model.Item.GetString("Title", string.Empty) : string.Empty; 125 126 if (!string.IsNullOrEmpty(title)) 127 { 128 string maxWidth = Model.Item.GetRawValueString("TextReadability", string.Empty) == "max-width-on" ? " mw-75ch" : string.Empty; 129 string titleFontSize = Model.Item.GetString("TitleFontSize", "h2"); 130 string titleColor = Model.Item.GetString("TitleColor", "text-inherit"); 131 string titleOpacity = Model.Item.GetString("TitleOpacity", "opacity-100"); 132 133 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 134 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} {titleColor} {titleOpacity}{maxWidth} m-0\">"; 135 string headingLevelStop = $"</{headingLevel}>"; 136 137 @headingLevelStart 138 @title 139 @headingLevelStop 140 } 141 } 142 143 @helper RenderLead() 144 { 145 if (!string.IsNullOrEmpty(Model.Item.GetString("Lead"))) 146 { 147 string subtitleColor = Model.Item.GetString("SubtitleColor", "text-inherit"); 148 string subtitleOpacity = Model.Item.GetString("SubtitleOpacity", "opacity-100"); 149 string maxWidth = Model.Item.GetRawValueString("TextReadability", string.Empty) == "max-width-on" ? " mw-75ch" : string.Empty; 150 string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); 151 152 <p class="m-0 lead @(subtitleFontSize) @(subtitleColor) @(subtitleOpacity)@(maxWidth)"> 153 @Model.Item.GetString("Lead") 154 </p> 155 } 156 } 157 158 @helper RenderText() 159 { 160 if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 161 { 162 string maxWidth = Model.Item.GetRawValueString("TextReadability", string.Empty) == "max-width-on" ? " mw-75ch" : string.Empty; 163 string textColor = Model.Item.GetString("TextColor", "text-inherit"); 164 string textOpacity = Model.Item.GetString("TextOpacity", "opacity-100"); 165 166 <div class="mb-0-last-child @textColor @(textOpacity)@(maxWidth)"> 167 @Model.Item.GetString("Text") 168 </div> 169 } 170 } 171 172 @helper RenderImage() 173 { 174 if (!string.IsNullOrEmpty(Model.Item.GetString("Image"))) 175 { 176 int xPos = Model.Item?.GetFile("Image")?.FocalPositionFromLeft ?? 50; 177 int yPos = Model.Item?.GetFile("Image")?.FocalPositionFromTop ?? 50; 178 string ratioCssClass = Model.Item.GetRawValueString("ImageAspectRatio") != "0" && Model.Item.GetRawValueString("ImageAspectRatio") != "" ? "ratio" : string.Empty; 179 string ratioVariable = Model.Item.GetRawValueString("ImageAspectRatio") != "0" && Model.Item.GetRawValueString("ImageAspectRatio") != "" ? "style=\"--bs-aspect-ratio: " + Model.Item.GetRawValueString("ImageAspectRatio") + "\"" : string.Empty; 180 string imageAspect = Model.Item.GetRawValueString("ImageAspectRatio", string.Empty); 181 string ImageObjectFit = Model.Item.GetRawValueString("ImageObjectFit", string.Empty); 182 ImageObjectFit = ImageObjectFit == "cover" ? string.Empty : ImageObjectFit; 183 ImageObjectFit = ImageObjectFit == "contain" ? "object-fit:contain" : ImageObjectFit; 184 185 var parms = new Dictionary<string, object>(); 186 parms.Add("loading", "lazy"); 187 parms.Add("style", ImageObjectFit); 188 parms.Add("alt", Model.Item.GetString("ImageAltText")); 189 parms.Add("columns", Model.GridRowColumnCount); 190 191 if (Model.Item.GetRawValueString("ImageAspectRatio") == "0") 192 { 193 parms.Add("fullwidth", true); 194 parms.Add("cssClass", "img-fluid"); 195 196 if (Model.Item.GetString("Layout") == "text-center") 197 { 198 <figure class="d-flex flex-column align-items-center"> 199 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 200 </figure> 201 } 202 else 203 { 204 <figure> 205 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 206 </figure> 207 } 208 } 209 else 210 { 211 <figure class="mb-0 @ratioCssClass" @ratioVariable> 212 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 213 </figure> 214 215 } 216 } 217 } 218 219 @helper RenderButtons(Dynamicweb.Frontend.LinkViewModel link1, Dynamicweb.Frontend.LinkViewModel link2) 220 { 221 int shopId = Pageview.GetProductPageId(); 222 string linkType = Model.Item.GetRawValueString("LinkType", "page"); 223 string linkType2 = Model.Item.GetRawValueString("LinkType2", "page2"); 224 225 if (linkType == "page" && Model.Item.GetLink("ButtonLink") != null) 226 { 227 link1 = Model.Item.GetLink("ButtonLink"); 228 } 229 230 if (linkType2 == "page2" && Model.Item.GetLink("ButtonLink2") != null) 231 { 232 link2 = Model.Item.GetLink("ButtonLink2"); 233 } 234 235 if (linkType == "product-group") 236 { 237 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink"); 238 IList<string> groupIds = new List<string> { }; 239 240 if (selectedGroups != null) 241 { 242 foreach (var fromGroup in selectedGroups) 243 { 244 groupIds.Add(fromGroup.Id); 245 } 246 } 247 248 link1 = new Dynamicweb.Frontend.LinkViewModel() 249 { 250 Url = "/Default.aspx?ID=" + shopId + "&GroupID=" + string.Join(",", groupIds).Trim(), 251 IsExternal = false 252 }; 253 } 254 255 if (linkType2 == "product-group2") 256 { 257 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink2"); 258 IList<string> groupIds = new List<string> { }; 259 260 if (selectedGroups != null) 261 { 262 foreach (var fromGroup in selectedGroups) 263 { 264 groupIds.Add(fromGroup.Id); 265 } 266 } 267 268 link2 = new Dynamicweb.Frontend.LinkViewModel() 269 { 270 Url = "/Default.aspx?ID=" + shopId + "&GroupID=" + string.Join(",", groupIds).Trim(), 271 IsExternal = false 272 }; 273 } 274 275 if (linkType == "product") 276 { 277 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink"); 278 IList<string> productIds = new List<string> { }; 279 280 if (products != null) 281 { 282 foreach (var product in products.Products) 283 { 284 productIds.Add(product.Id); 285 } 286 } 287 288 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 289 string productLink = products.Products.FirstOrDefault().GetProductLink(shopId, false); 290 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + shopId + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 291 292 link1 = new Dynamicweb.Frontend.LinkViewModel() 293 { 294 Url = productLink, 295 IsExternal = false 296 }; 297 } 298 299 if (linkType2 == "product2") 300 { 301 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink2"); 302 IList<string> productIds = new List<string> { }; 303 304 if (products != null) 305 { 306 foreach (var product in products.Products) 307 { 308 productIds.Add(product.Id); 309 } 310 } 311 312 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 313 string productLink = products.Products.FirstOrDefault().GetProductLink(shopId, false); 314 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + shopId + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 315 316 link2 = new Dynamicweb.Frontend.LinkViewModel() 317 { 318 Url = productLink, 319 IsExternal = false 320 }; 321 } 322 323 if (link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 324 { 325 string buttonStyle = Model.Item.GetRawValueString("ButtonStyle", "primary"); 326 buttonStyle = buttonStyle == "primary" ? " btn-primary" : buttonStyle; 327 buttonStyle = buttonStyle == "secondary" ? " btn-secondary" : buttonStyle; 328 buttonStyle = buttonStyle == "link" ? " btn-link" : buttonStyle; 329 string buttonStyle2 = Model.Item.GetRawValueString("ButtonStyle2", "secondary"); 330 buttonStyle2 = buttonStyle2 == "primary" ? " btn-primary" : buttonStyle2; 331 buttonStyle2 = buttonStyle2 == "secondary" ? " btn-secondary" : buttonStyle2; 332 buttonStyle2 = buttonStyle2 == "link" ? " btn-link" : buttonStyle2; 333 string target1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "target=\"_blank\"" : string.Empty; 334 string target2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "target=\"_blank\"" : string.Empty; 335 string rel1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "rel=\"noopener\"" : string.Empty; 336 string rel2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "rel=\"noopener\"" : string.Empty; 337 string buttonLabel = Model.Item.GetString("ButtonLabel", string.Empty); 338 string buttonLabel2 = Model.Item.GetString("ButtonLabel2", string.Empty); 339 string stretchedLink = Model.Item.GetRawValueString("StretchedLink", "column-not-clickable"); 340 string stretchedLink2 = Model.Item.GetRawValueString("StretchedLink2", "column-not-clickable"); 341 string stretchedLinkClass = stretchedLink == "column-clickable" && string.IsNullOrEmpty(link2.Url) && string.IsNullOrEmpty(buttonLabel2) ? " stretched-link" : string.Empty; 342 string stretchedLinkClass2 = stretchedLink2 == "column-clickable" && string.IsNullOrEmpty(link1.Url) && string.IsNullOrEmpty(buttonLabel) ? " stretched-link" : string.Empty; 343 string buttonSize = Model.Item.GetRawValueString("ButtonSize", "regular"); 344 buttonSize = buttonSize == "small" ? " btn-sm" : buttonSize; 345 buttonSize = buttonSize == "regular" ? string.Empty : buttonSize; 346 buttonSize = buttonSize == "large" ? " btn-lg" : buttonSize; 347 string alignmentClass = string.Empty; 348 349 if (Model.Item.GetString("Layout") == "text-center") 350 { 351 alignmentClass = " justify-content-center"; 352 } 353 354 <div class="d-flex flex-wrap gap-3@(alignmentClass)"> 355 356 @if (link1 != null && !string.IsNullOrEmpty(link1.Url)) 357 { 358 if (!string.IsNullOrEmpty(buttonLabel)) 359 { 360 <a href="@link1.Url" @target1 @rel1 class="text-nowrap btn@(buttonStyle)@(buttonSize)@(stretchedLinkClass)">@buttonLabel</a> 361 } 362 else 363 { 364 <a href="@link1.Url" @target1 @rel1 class="@(stretchedLinkClass)"> 365 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 366 </a> 367 } 368 } 369 370 @if (link2 != null && !string.IsNullOrEmpty(link2.Url)) 371 { 372 if (!string.IsNullOrEmpty(buttonLabel2)) 373 { 374 <a href="@link2.Url" @target2 @rel2 class="text-nowrap btn@(buttonStyle2)@(buttonSize)@(stretchedLinkClass2)">@buttonLabel2</a> 375 } 376 else 377 { 378 <a href="@link2.Url" @target2 @rel2 class="@(stretchedLinkClass)"> 379 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 380 </a> 381 } 382 } 383 </div> 384 } 385 } 386

Jamaica

Nogle af verdens mest prestigefyldte og dyreste kaffesorter dyrkes på Jamaica - heriblandt Blue Mountain. Denne arabica kaffe vokser kun på øens østligste spids og dyrkes i omkring 2.200 meters højde, hvilket gør den til en af verdens højest voksende kaffer. 

Produktionen er meget begrænset og ægte Jamaica Blue Mountain leveres i tønder, der kontrolleres af Coffee Industri Board, inden den eksporteres fra Jamaica.

Blue Mountain kendetegnes for et flot ensartet udseende, en frisk og sødlig duft, en rund smag med nøddetoner og en lang, blød eftersmag.

Error executing template "Designs/Swift_custom/Paragraph/Swift_TextAndImage.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_5c7dcfc106a64cffaeb6aec61eadccfe.<>c__DisplayClass4_0.<RenderButtons>b__0(TextWriter __razor_helper_writer) in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift_custom\Paragraph\Swift_TextAndImage.cshtml:line 289
   at CompiledRazorTemplates.Dynamic.RazorEngine_5c7dcfc106a64cffaeb6aec61eadccfe.Execute() in D:\Solution\BKI LIVE\Files\Templates\Designs\Swift_custom\Paragraph\Swift_TextAndImage.cshtml:line 98
   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.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using S_DW_BKI_Swift.CustomModules.Extensions 4 5 @{ 6 Dynamicweb.Frontend.LinkViewModel link1 = new Dynamicweb.Frontend.LinkViewModel(); 7 Dynamicweb.Frontend.LinkViewModel link2 = new Dynamicweb.Frontend.LinkViewModel(); 8 9 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 10 string layout = Model.Item.GetRawValueString("Layout", "image-top"); 11 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 12 string contentPaddingClass = string.Empty; 13 string gapClass = " gap-3"; 14 15 switch (contentPadding) 16 { 17 case "small": 18 contentPaddingClass = " p-3"; 19 gapClass = " gap-0"; 20 break; 21 case "large": 22 contentPaddingClass = " p-5"; 23 gapClass = " gap-0"; 24 break; 25 } 26 } 27 28 <div class="d-flex flex-column@(gapClass) h-100 position-relative@(theme) item_@Model.Item.SystemName.ToLower()"> 29 <a id="@Model.ID" class="user-select-none position-absolute top-0" style="scroll-margin-top:var(--header-height,150px)"></a> 30 @switch (layout) 31 { 32 case "image-top": 33 @RenderImage() 34 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 35 { 36 <div class="d-flex flex-column gap-3 h-100@(contentPaddingClass)"> 37 @{ 38 @RenderTitle() 39 @RenderLead() 40 @RenderText() 41 @RenderButtons(link1, link2) 42 } 43 </div> 44 } 45 break; 46 47 case "title-top": 48 if (!string.IsNullOrEmpty(Model.Item.GetString("Title"))) 49 { 50 <div class="@(contentPaddingClass)"> 51 @{ @RenderTitle() } 52 </div> 53 } 54 @RenderImage() 55 if (!string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 56 { 57 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 58 @{ 59 @RenderLead() 60 @RenderText() 61 @RenderButtons(link1, link2) 62 } 63 </div> 64 } 65 break; 66 67 case "title-lead-top": 68 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead"))) 69 { 70 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 71 @{ 72 @RenderTitle() 73 @RenderLead() 74 } 75 </div> 76 } 77 @RenderImage() 78 if (!string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 79 { 80 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 81 @{ 82 @RenderText() 83 @RenderButtons(link1, link2) 84 } 85 </div> 86 } 87 break; 88 89 case "text-center": 90 @RenderImage() 91 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 92 { 93 <div class="d-flex flex-column gap-3 align-items-center text-center h-100@(contentPaddingClass)"> 94 @{ 95 @RenderTitle() 96 @RenderLead() 97 @RenderText() 98 @RenderButtons(link1, link2) 99 } 100 </div> 101 } 102 break; 103 104 case "image-bottom": 105 if (!string.IsNullOrEmpty(Model.Item.GetString("Title")) || !string.IsNullOrEmpty(Model.Item.GetString("Lead")) || !string.IsNullOrEmpty(Model.Item.GetString("Text")) || link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 106 { 107 <div class="d-flex flex-column gap-3@(contentPaddingClass)"> 108 @{ 109 @RenderTitle() 110 @RenderLead() 111 @RenderText() 112 @RenderButtons(link1, link2) 113 } 114 </div> 115 } 116 @RenderImage() 117 break; 118 } 119 </div> 120 121 @helper RenderTitle() 122 { 123 bool hideTitle = Model.Item?.GetBoolean("HideTitle") ?? false; 124 string title = !hideTitle ? Model.Item.GetString("Title", string.Empty) : string.Empty; 125 126 if (!string.IsNullOrEmpty(title)) 127 { 128 string maxWidth = Model.Item.GetRawValueString("TextReadability", string.Empty) == "max-width-on" ? " mw-75ch" : string.Empty; 129 string titleFontSize = Model.Item.GetString("TitleFontSize", "h2"); 130 string titleColor = Model.Item.GetString("TitleColor", "text-inherit"); 131 string titleOpacity = Model.Item.GetString("TitleOpacity", "opacity-100"); 132 133 string headingLevel = Model.Item.GetString("HeadingLevel", "h2"); 134 string headingLevelStart = $"<{headingLevel} class=\"{titleFontSize} {titleColor} {titleOpacity}{maxWidth} m-0\">"; 135 string headingLevelStop = $"</{headingLevel}>"; 136 137 @headingLevelStart 138 @title 139 @headingLevelStop 140 } 141 } 142 143 @helper RenderLead() 144 { 145 if (!string.IsNullOrEmpty(Model.Item.GetString("Lead"))) 146 { 147 string subtitleColor = Model.Item.GetString("SubtitleColor", "text-inherit"); 148 string subtitleOpacity = Model.Item.GetString("SubtitleOpacity", "opacity-100"); 149 string maxWidth = Model.Item.GetRawValueString("TextReadability", string.Empty) == "max-width-on" ? " mw-75ch" : string.Empty; 150 string subtitleFontSize = Model.Item.GetRawValueString("SubtitleFontSize", "fs-5"); 151 152 <p class="m-0 lead @(subtitleFontSize) @(subtitleColor) @(subtitleOpacity)@(maxWidth)"> 153 @Model.Item.GetString("Lead") 154 </p> 155 } 156 } 157 158 @helper RenderText() 159 { 160 if (!string.IsNullOrEmpty(Model.Item.GetString("Text"))) 161 { 162 string maxWidth = Model.Item.GetRawValueString("TextReadability", string.Empty) == "max-width-on" ? " mw-75ch" : string.Empty; 163 string textColor = Model.Item.GetString("TextColor", "text-inherit"); 164 string textOpacity = Model.Item.GetString("TextOpacity", "opacity-100"); 165 166 <div class="mb-0-last-child @textColor @(textOpacity)@(maxWidth)"> 167 @Model.Item.GetString("Text") 168 </div> 169 } 170 } 171 172 @helper RenderImage() 173 { 174 if (!string.IsNullOrEmpty(Model.Item.GetString("Image"))) 175 { 176 int xPos = Model.Item?.GetFile("Image")?.FocalPositionFromLeft ?? 50; 177 int yPos = Model.Item?.GetFile("Image")?.FocalPositionFromTop ?? 50; 178 string ratioCssClass = Model.Item.GetRawValueString("ImageAspectRatio") != "0" && Model.Item.GetRawValueString("ImageAspectRatio") != "" ? "ratio" : string.Empty; 179 string ratioVariable = Model.Item.GetRawValueString("ImageAspectRatio") != "0" && Model.Item.GetRawValueString("ImageAspectRatio") != "" ? "style=\"--bs-aspect-ratio: " + Model.Item.GetRawValueString("ImageAspectRatio") + "\"" : string.Empty; 180 string imageAspect = Model.Item.GetRawValueString("ImageAspectRatio", string.Empty); 181 string ImageObjectFit = Model.Item.GetRawValueString("ImageObjectFit", string.Empty); 182 ImageObjectFit = ImageObjectFit == "cover" ? string.Empty : ImageObjectFit; 183 ImageObjectFit = ImageObjectFit == "contain" ? "object-fit:contain" : ImageObjectFit; 184 185 var parms = new Dictionary<string, object>(); 186 parms.Add("loading", "lazy"); 187 parms.Add("style", ImageObjectFit); 188 parms.Add("alt", Model.Item.GetString("ImageAltText")); 189 parms.Add("columns", Model.GridRowColumnCount); 190 191 if (Model.Item.GetRawValueString("ImageAspectRatio") == "0") 192 { 193 parms.Add("fullwidth", true); 194 parms.Add("cssClass", "img-fluid"); 195 196 if (Model.Item.GetString("Layout") == "text-center") 197 { 198 <figure class="d-flex flex-column align-items-center"> 199 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 200 </figure> 201 } 202 else 203 { 204 <figure> 205 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 206 </figure> 207 } 208 } 209 else 210 { 211 <figure class="mb-0 @ratioCssClass" @ratioVariable> 212 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("Image") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 213 </figure> 214 215 } 216 } 217 } 218 219 @helper RenderButtons(Dynamicweb.Frontend.LinkViewModel link1, Dynamicweb.Frontend.LinkViewModel link2) 220 { 221 int shopId = Pageview.GetProductPageId(); 222 string linkType = Model.Item.GetRawValueString("LinkType", "page"); 223 string linkType2 = Model.Item.GetRawValueString("LinkType2", "page2"); 224 225 if (linkType == "page" && Model.Item.GetLink("ButtonLink") != null) 226 { 227 link1 = Model.Item.GetLink("ButtonLink"); 228 } 229 230 if (linkType2 == "page2" && Model.Item.GetLink("ButtonLink2") != null) 231 { 232 link2 = Model.Item.GetLink("ButtonLink2"); 233 } 234 235 if (linkType == "product-group") 236 { 237 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink"); 238 IList<string> groupIds = new List<string> { }; 239 240 if (selectedGroups != null) 241 { 242 foreach (var fromGroup in selectedGroups) 243 { 244 groupIds.Add(fromGroup.Id); 245 } 246 } 247 248 link1 = new Dynamicweb.Frontend.LinkViewModel() 249 { 250 Url = "/Default.aspx?ID=" + shopId + "&GroupID=" + string.Join(",", groupIds).Trim(), 251 IsExternal = false 252 }; 253 } 254 255 if (linkType2 == "product-group2") 256 { 257 IList<ProductGroupViewModel> selectedGroups = Model.Item.GetValue<IList<ProductGroupViewModel>>("ProductGroupLink2"); 258 IList<string> groupIds = new List<string> { }; 259 260 if (selectedGroups != null) 261 { 262 foreach (var fromGroup in selectedGroups) 263 { 264 groupIds.Add(fromGroup.Id); 265 } 266 } 267 268 link2 = new Dynamicweb.Frontend.LinkViewModel() 269 { 270 Url = "/Default.aspx?ID=" + shopId + "&GroupID=" + string.Join(",", groupIds).Trim(), 271 IsExternal = false 272 }; 273 } 274 275 if (linkType == "product") 276 { 277 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink"); 278 IList<string> productIds = new List<string> { }; 279 280 if (products != null) 281 { 282 foreach (var product in products.Products) 283 { 284 productIds.Add(product.Id); 285 } 286 } 287 288 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 289 string productLink = products.Products.FirstOrDefault().GetProductLink(shopId, false); 290 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + shopId + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 291 292 link1 = new Dynamicweb.Frontend.LinkViewModel() 293 { 294 Url = productLink, 295 IsExternal = false 296 }; 297 } 298 299 if (linkType2 == "product2") 300 { 301 ProductListViewModel products = Model.Item.GetValue<ProductListViewModel>("ProductLink2"); 302 IList<string> productIds = new List<string> { }; 303 304 if (products != null) 305 { 306 foreach (var product in products.Products) 307 { 308 productIds.Add(product.Id); 309 } 310 } 311 312 string productParameter = productIds.Count == 1 ? "ProductID" : "MainProductId"; 313 string productLink = products.Products.FirstOrDefault().GetProductLink(shopId, false); 314 productLink = productIds.Count != 1 ? "/Default.aspx?ID=" + shopId + "&" + productParameter + "=" + string.Join(",", productIds).Trim() : productLink; 315 316 link2 = new Dynamicweb.Frontend.LinkViewModel() 317 { 318 Url = productLink, 319 IsExternal = false 320 }; 321 } 322 323 if (link1 != null && !string.IsNullOrEmpty(link1.Url) || link2 != null && !string.IsNullOrEmpty(link2.Url)) 324 { 325 string buttonStyle = Model.Item.GetRawValueString("ButtonStyle", "primary"); 326 buttonStyle = buttonStyle == "primary" ? " btn-primary" : buttonStyle; 327 buttonStyle = buttonStyle == "secondary" ? " btn-secondary" : buttonStyle; 328 buttonStyle = buttonStyle == "link" ? " btn-link" : buttonStyle; 329 string buttonStyle2 = Model.Item.GetRawValueString("ButtonStyle2", "secondary"); 330 buttonStyle2 = buttonStyle2 == "primary" ? " btn-primary" : buttonStyle2; 331 buttonStyle2 = buttonStyle2 == "secondary" ? " btn-secondary" : buttonStyle2; 332 buttonStyle2 = buttonStyle2 == "link" ? " btn-link" : buttonStyle2; 333 string target1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "target=\"_blank\"" : string.Empty; 334 string target2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "target=\"_blank\"" : string.Empty; 335 string rel1 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link1.IsExternal ? "rel=\"noopener\"" : string.Empty; 336 string rel2 = Pageview.AreaSettings.GetBoolean("OpenLinksInNewTab") && link2.IsExternal ? "rel=\"noopener\"" : string.Empty; 337 string buttonLabel = Model.Item.GetString("ButtonLabel", string.Empty); 338 string buttonLabel2 = Model.Item.GetString("ButtonLabel2", string.Empty); 339 string stretchedLink = Model.Item.GetRawValueString("StretchedLink", "column-not-clickable"); 340 string stretchedLink2 = Model.Item.GetRawValueString("StretchedLink2", "column-not-clickable"); 341 string stretchedLinkClass = stretchedLink == "column-clickable" && string.IsNullOrEmpty(link2.Url) && string.IsNullOrEmpty(buttonLabel2) ? " stretched-link" : string.Empty; 342 string stretchedLinkClass2 = stretchedLink2 == "column-clickable" && string.IsNullOrEmpty(link1.Url) && string.IsNullOrEmpty(buttonLabel) ? " stretched-link" : string.Empty; 343 string buttonSize = Model.Item.GetRawValueString("ButtonSize", "regular"); 344 buttonSize = buttonSize == "small" ? " btn-sm" : buttonSize; 345 buttonSize = buttonSize == "regular" ? string.Empty : buttonSize; 346 buttonSize = buttonSize == "large" ? " btn-lg" : buttonSize; 347 string alignmentClass = string.Empty; 348 349 if (Model.Item.GetString("Layout") == "text-center") 350 { 351 alignmentClass = " justify-content-center"; 352 } 353 354 <div class="d-flex flex-wrap gap-3@(alignmentClass)"> 355 356 @if (link1 != null && !string.IsNullOrEmpty(link1.Url)) 357 { 358 if (!string.IsNullOrEmpty(buttonLabel)) 359 { 360 <a href="@link1.Url" @target1 @rel1 class="text-nowrap btn@(buttonStyle)@(buttonSize)@(stretchedLinkClass)">@buttonLabel</a> 361 } 362 else 363 { 364 <a href="@link1.Url" @target1 @rel1 class="@(stretchedLinkClass)"> 365 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 366 </a> 367 } 368 } 369 370 @if (link2 != null && !string.IsNullOrEmpty(link2.Url)) 371 { 372 if (!string.IsNullOrEmpty(buttonLabel2)) 373 { 374 <a href="@link2.Url" @target2 @rel2 class="text-nowrap btn@(buttonStyle2)@(buttonSize)@(stretchedLinkClass2)">@buttonLabel2</a> 375 } 376 else 377 { 378 <a href="@link2.Url" @target2 @rel2 class="@(stretchedLinkClass)"> 379 <span class="visually-hidden">@Model.Item.GetString("Title")</span> 380 </a> 381 } 382 } 383 </div> 384 } 385 } 386

Lyst til at vide mere om Mountain kaffe?

Så hop ind på vores brandside omkring Mountain kaffe og lær meget mere om, hvad I kan forvente jer af delikate smagsoplevelser!

Populære blogindlæg

Husker I tedrikkerne i kaffeløsningen?

Husker I tedrikkerne i kaffeløsningen?

Te er mere populært, end mange måske forestiller sig. Faktisk drikker 75% af kaffedrikkerne også te. Blog klogere på, hvordan du tilgodeser dine medarbejderes individuelle behov her.

Har du brug for vejledning?
Kontakt os i dag

Om du allerede har svarene eller ønsker hjælp til at finde dem, så sidder vi klar til at tage en uforpligtende snak om jeres muligheder - og finde frem til den helt rigtige kaffeløsning for netop dig og dine kollegaer, kunder og samarbejdspartnere.

Ring til os på +45 86 29 22 99 eller udfyld formularen her, så vender vi tilbage hurtigst muligt.

*Obligatorisk