Veel bedrijven lopen vast in hun digitale groei.
Gefragmenteerde aanpak
__________
Zonder een geïntegreerd platform worden webshop, data en marketing los van elkaar ontwikkeld. Dit leidt tot inefficiëntie, inconsistentie en gemiste kansen.
Technische beperkingen
__________
Verouderde of niet schaalbare systemen beperken de flexibiliteit en maken het lastig om nieuwe functies of markten snel toe te voegen.
Gebrek aan doorontwikkeling
__________
Zonder een partner die continu meedenkt en optimaliseert, blijft de webshop stil staan. Hierdoor worden klanten niet optimaal bediend en stagneert conversiegroei.
Wat is E-Commerce?
____________________
E-commerce is het digitaal verkopen van producten of diensten via online kanalen zoals webshops, marketplaces en apps. Zo bedient u klanten snel, efficiënt en 24/7 – ongeacht locatie of device.
Een krachtig e-commerceplatform combineert gebruiksvriendelijkheid, slimme integraties en schaalbaarheid. Dit optimaliseert de klantreis, verhoogt de omzet en maakt u wendbaar in een veranderende markt.
bluedesk ontwikkelt en optimaliseert e-commerceoplossingen die bijdragen aan duurzame groei en fungeert als uw strategische partner in digitale handel.
Onze aanpak
Rendabele oplossingen
Webshop, PIM en Online Marketing simpel gemaakt
__________
E-Commerce is voor ons de combinatie van een (zakelijke) webshop, product information management (PIM) en online marketing. Het geheel van die oplossingen maken wij simpel.
Onze oplossing zorgt voor een stabiele digitale basis voor uw business welke voor langdurig rendement zorgt.
Stabiele
digitale basis
Error executing template "Designs/ClientBase_generated/Paragraph/MultiColumnParagraph.cshtml" System.InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Collections.Generic.List`1.Enumerator.MoveNextRare() at CompiledRazorTemplates.Dynamic.RazorEngine_0e106de0ae7e47f69eefa352eaa2aad0.<>c__DisplayClass9_0.<RenderContentArea>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Bluedesk\BluedeskCorporate\files\Templates\Designs\ClientBase_generated\Paragraph\MultiColumnParagraph.cshtml:line 723 at CompiledRazorTemplates.Dynamic.RazorEngine_0e106de0ae7e47f69eefa352eaa2aad0.Execute() in D:\dynamicweb.net\Solutions\Bluedesk\BluedeskCorporate\files\Templates\Designs\ClientBase_generated\Paragraph\MultiColumnParagraph.cshtml:line 664 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.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using Dynamicweb; 3 @using Dynamicweb.Content.Items; 4 @using System.Web; 5 @using Bluedesk.Tools.DynamicWeb.ExtensionMethods; 6 @using Bluedesk.DynamicWeb.ItemTypes; 7 8 @using System.Runtime.Caching; 9 10 11 @{ 12 13 var paragraphID = Pageview.CurrentParagraph.ID; 14 MultiColumnParagraph _data = new MultiColumnParagraph(); 15 16 int CacheTime = 5; 17 MemoryCache memCache = MemoryCache.Default; 18 string cacheKey = $"MultiColumnParagraph_{paragraphID}-{Pageview.AreaID}"; 19 20 if (Pageview.IsVisualEditorMode) 21 { 22 var cache = MemoryCache.Default; 23 memCache.Remove($"MultiColumnParagraph_{paragraphID}-{Pageview.AreaID}"); 24 } 25 26 if (memCache.Contains(cacheKey)) 27 { 28 _data = memCache.Get(cacheKey) as MultiColumnParagraph; 29 30 if (_data == null) 31 { 32 _data = Dynamicweb.Content.Services.Items.GetItem("MultiColumnParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<MultiColumnParagraph>() ?? new MultiColumnParagraph(); 33 memCache.Set(cacheKey, _data, DateTimeOffset.UtcNow.AddMinutes(CacheTime)); 34 35 } 36 37 } 38 else 39 { 40 _data = Dynamicweb.Content.Services.Items.GetItem("MultiColumnParagraph", Pageview.CurrentParagraph.ItemId).ToCodeFirstItem<MultiColumnParagraph>() ?? new MultiColumnParagraph(); 41 memCache.Set(cacheKey, _data, DateTimeOffset.UtcNow.AddMinutes(CacheTime)); 42 } 43 44 List<string> BackgroundConfigIdList = ((List<string>)Dynamicweb.Context.Current.Items["BackgroundConfigIdList"]) ?? new List<string>(); 45 BackgroundConfigIdList.Add(_data.BackgroundConfigurationID); 46 Dynamicweb.Context.Current.Items["BackgroundConfigIdList"] = BackgroundConfigIdList; 47 48 string ParagraphHeight = _data.Height == 0 ? "auto" : _data.Height + "px"; 49 string MobileParagraphHeight = _data.MobileHeight == 0 ? "auto" : _data.MobileHeight + "px"; 50 51 } 52 53 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 54 @using Dynamicweb; 55 @using Dynamicweb.Content.Items; 56 @using Bluedesk.DynamicWeb.ItemTypes; 57 58 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 59 @using Dynamicweb; 60 @using Dynamicweb.Content.Items; 61 @using Bluedesk.DynamicWeb.ItemTypes; 62 63 @functions { 64 65 Dictionary<string, string> GetFontConfiguration(string TextColor, FontConfigurationItemTab FontConfiguration) 66 { 67 var colorService = new ColorSwatchService(); 68 TextColor = !string.IsNullOrWhiteSpace(TextColor) ? TextColor : "" ; 69 TextColor = !TextColor.Contains("#") ? colorService.GetHexColor(Pageview.AreaID, TextColor) : TextColor; 70 Dictionary<string, string> FontConfig = new Dictionary<string, string>() { 71 { "textColor" , TextColor }, 72 { "fontSize" , FontConfiguration.FontSize }, 73 { "lineHeight", FontConfiguration.LineHeight}, 74 { "fontFamily" , FontConfiguration.FontConfiguration.FontFamily }, 75 { "fontWeight" , FontConfiguration.FontWeight }, 76 { "fontStyle" , FontConfiguration.FontStyle } 77 }; 78 return FontConfig; 79 } 80 81 public string GenerateButtonConfigVariables(ButtonConfiguration BC, MasterConfig mc, int areaId) 82 { 83 string ButtonLabelAlignment = BC.ButtonLabelAlignment; 84 switch (ButtonLabelAlignment) 85 { 86 case "align-left": 87 ButtonLabelAlignment = "flex-start"; 88 break; 89 case "align-center": 90 ButtonLabelAlignment = "center"; 91 break; 92 case "align-right": 93 ButtonLabelAlignment = "flex-end"; 94 break; 95 case "align-full": 96 ButtonLabelAlignment = "space-between"; 97 break; 98 default: 99 ButtonLabelAlignment = "flex-start"; 100 break; 101 } 102103 var btnStyleBlock = new System.Text.StringBuilder(); 104105 // General Config 106 btnStyleBlock.Append(GenerateCssVar("btn-min-height", $"{mc.GeneralConfiguration.ButtonHeight}px")); 107 btnStyleBlock.Append(GenerateCssVar("btn-border-radius", $"{mc.GeneralConfiguration.RoundedCornerValue}px")); 108109 // Button Config 110 btnStyleBlock.Append(GenerateCssVar("btn-border-width", $"{BC.BorderSize.ToString()}px")); 111 btnStyleBlock.Append(GenerateCssVar("btn-label-alignment", ButtonLabelAlignment)); 112113 // Button Config Tab 114 btnStyleBlock.Append(GenerateCssVar("btn-bg-color", BC.ButtonColorConfiguration.BackgroundColor.GetColorCode(areaId))); 115 btnStyleBlock.Append(GenerateCssVar("btn-font-color", BC.ButtonColorConfiguration.FontColor.GetColorCode(areaId))); 116 btnStyleBlock.Append(GenerateCssVar("btn-border-color", BC.ButtonColorConfiguration.BorderColor.GetColorCode(areaId))); 117118 // Button Config Hover tab 119 btnStyleBlock.Append(GenerateCssVar("btn-bg-color-hover", BC.ButtonHoverColorConfiguration.BackgroundColor.GetColorCode(areaId))); 120 btnStyleBlock.Append(GenerateCssVar("btn-font-color-hover", BC.ButtonHoverColorConfiguration.FontColor.GetColorCode(areaId))); 121 btnStyleBlock.Append(GenerateCssVar("btn-border-color-hover", BC.ButtonHoverColorConfiguration.BorderColor.GetColorCode(areaId))); 122123 // Button Config Font Config 124 btnStyleBlock.Append(GenerateCssVar("btn-font-size", BC.FontConfiguration.FontSize)); 125 btnStyleBlock.Append(GenerateCssVar("btn-font-config-color", BC.FontConfiguration.Color.GetColorCode(areaId))); 126 btnStyleBlock.Append(GenerateCssVar("btn-font-line-height", BC.FontConfiguration.LineHeight)); 127 btnStyleBlock.Append(GenerateCssVar("btn-font-family", BC.FontConfiguration.FontConfiguration.FontFamily)); 128 btnStyleBlock.Append(GenerateCssVar("btn-font-weight", BC.FontConfiguration.FontWeight)); 129 btnStyleBlock.Append(GenerateCssVar("btn-font-transform", BC.FontConfiguration.FontStyle)); 130131 return btnStyleBlock.ToString(); 132 } 133134 public string GenerateCssVar(string name, string value) 135 { 136 if (!string.IsNullOrWhiteSpace(value)) { 137 return $"--{name}: {value};"; 138 } else { 139 return ""; 140 } 141 } 142 } 143144145 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 146 @using Dynamicweb; 147 @using Dynamicweb.Content.Items; 148 @using Bluedesk.DynamicWeb.ItemTypes; 149 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 150151152 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 153 @using Dynamicweb; 154 @using Dynamicweb.Content.Items; 155 @using Bluedesk.DynamicWeb.ItemTypes; 156 @using Bluedesk.DynamicWeb.ItemTypes.Extensions; 157 @using Bluedesk.DynamicWeb.ItemTypes.Configuration; 158 @using Bluedesk.DynamicWeb.ItemTypes.Settings.Configuration; 159 @using Dynamicweb; 160 @using Dynamicweb.Frontend 161 @using Bluedesk.DynamicWeb.ItemTypes.BaseSolution; 162163 @helper RenderButton(CTAButton button, PageView Pageview) 164 { 165166 if (!string.IsNullOrWhiteSpace(button.GetLink(Pageview))) 167 { 168 string Template = button.GetButtonTemplate().Replace("{{ ButtonLink }}", button.GetLink(Pageview)); 169 @Template; 170 } 171 } 172173174 @{ 175176 var colorService = new ColorSwatchService(); 177178 string fullWidthContainerClass = _data.Fullwidth ? "" : "container"; 179180 string backgroundClass = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundClass) ? string.Format("bg-{0}", _data.BackgroundConfiguration.BackgroundClass) : ""; 181 string backgroundStyle = !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundColor) ? $"background-color: {_data.BackgroundConfiguration.BackgroundColor}; " : ""; 182 backgroundStyle += !string.IsNullOrWhiteSpace(_data.BackgroundConfiguration.BackgroundImage) ? $"background-image: url({_data.BackgroundConfiguration.BackgroundImage}); " : ""; 183184 // string backgroundClass = "null"; 185 // string backgroundStyle = ""; 186 } 187188189 @functions { 190 //string getbackgroundclass(string backgroundClass) 191 //{ 192 // return !string.IsNullOrWhiteSpace(backgroundClass) ? string.Format("bg-{0}", backgroundClass) : ""; 193 //} 194 } 195196 @helper CTAParagraphImage( 197 ParagraphImageResizable Image, 198 bool hasContent, 199 bool ImageAsBackground, 200 string ImagePosition, 201 bool ParallaxImage, 202 bool Fullwidth, 203 string imagesHeight, 204 double ColumnWidthSize, 205 int AnimationDuration = 300, 206 bool AnimateHalfBlock = false 207 ) 208 { 209 if (!string.IsNullOrWhiteSpace(Image.Image)) 210 { 211212 string image = !string.IsNullOrWhiteSpace(Image.Image) ? Image.Image : null; 213 imagesHeight = hasContent ? imagesHeight : "100%"; 214 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 215216 string imageParrallax = ParallaxImage ? "rellax" : ""; 217 string imageAsBackground = ImageAsBackground ? "cta-paragraph__image--is-background" : ""; 218 double imageWidth = 2000; 219220 imageWidth = Fullwidth ? imageWidth : 1200; 221 imageWidth = !ImageAsBackground ? imageWidth * ColumnWidthSize : imageWidth; 222223 string strImageWidth = imageWidth + "px"; 224 string strImageWidthSize = imageWidth + "w"; 225226 string ImageUrl; 227 if (image.EndsWith(".gif")) 228 { 229 ImageUrl = image; 230 } 231 else 232 { 233 ImageUrl = "/Admin/Public/GetImage.ashx?Image=" + image + "&Crop=7&Format=webp&Quality=90&Compression=80"; 234 ImageUrl = ImageUrl.Replace("?x", "&x"); 235 } 236237 string animationDirection = AnimateHalfBlock ? ImagePosition.Equals("right") ? "fade-left" : "fade-right" : ""; 238239 if (!string.IsNullOrWhiteSpace(Image.Image)) 240 { 241242 <figure class="cta-paragraph__image-container @imageAsBackground @Image.PositionY @Image.PositionX" style="@imagesHeight" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 243244 <picture class="cta-paragraph__image @Image.BackgroundSize @imageParrallax"> 245 @if (ImageUrl.EndsWith(".gif")) 246 { 247 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 248 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 249 <img src="@ImageUrl" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 250 } 251 else 252 { 253 <source media="(max-width: 400px)" srcset="@ImageUrl&Width=400"> 254 <source media="(max-width: 994px)" srcset="@ImageUrl&Width=994"> 255 <img src="@ImageUrl&Width=@imageWidth" loading="lazy" alt="@Image.ImageAlt" class="cta-paragraph__image @Image.BackgroundSize @imageParrallax" width="1980" height="500"> 256 } 257 </picture> 258259 </figure> 260 } 261 } 262 } 263264 @helper CTAParagraphContent( 265 int paragraphID, 266 ParagraphHeader Header, 267 ParagraphHeader SubHeader, 268 ParagraphContent Content, 269 CTAButton Button, 270 CTAButton ExtraButton, 271 ParagraphImage Image, 272 bool strCenterVertical, 273 string ImagePosition = "", 274 int AnimationDuration = 300, 275 bool AnimateHalfBlock = false 276 ) 277 { 278279 bool hasImage = !string.IsNullOrWhiteSpace(Image.Image) ? true : false; 280 string noImageClass = hasImage ? "" : "no-image"; 281282 string centerTextClass = strCenterVertical ? "text-center" : ""; 283 string centerContent = !string.IsNullOrWhiteSpace(Image.Image) ? "" : "cta-paragraph__content--center"; 284285 string paragraphInstanceClass = "cta-paragraph__content--" + paragraphID; 286287 string animationDirection = (AnimateHalfBlock && hasImage) ? ImagePosition.Equals("right") ? "fade-right" : "fade-left" : ""; 288289 if (!string.IsNullOrWhiteSpace(Button.ButtonText) || !string.IsNullOrWhiteSpace(Content.Text) || !string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 290 { 291292 <section class="cta-paragraph__content @paragraphInstanceClass @centerContent @noImageClass" data-aos="@animationDirection" data-aos-duration="@AnimationDuration"> 293294 <article class="cta-paragraph__content-container @noImageClass"> 295296 @if (!string.IsNullOrWhiteSpace(Header.HeaderFormatted("cta-paragraph__header"))) 297 { 298 <header class="cta-paragraph__header @centerTextClass"> 299 @if (SubHeader != null) 300 { 301 @SubHeader.HeaderFormatted("cta-paragraph__subheader") 302 } 303 @Header.HeaderFormatted("cta-paragraph__header") 304 </header> 305 } 306307 @if (!string.IsNullOrWhiteSpace(Content.Text)) 308 { 309 <div class="cta-paragraph__text @centerTextClass">@Content.Text</div> 310 } 311312 @if (!string.IsNullOrWhiteSpace(Button.GetLink(Pageview)) && !string.IsNullOrWhiteSpace(Button.ButtonText)) 313 { 314 <nav class="cta-paragraph__btn-navigation @centerTextClass"> 315 @RenderButton(Button, Pageview) 316 @RenderButton(ExtraButton, Pageview) 317 </nav> 318 } 319320 </article> 321 </section> 322323 } 324325 } 326327 @helper CTAParagraphVideo(ParagraphVideo Video, string imagesHeight) 328 { 329 if (!string.IsNullOrWhiteSpace(Video.YoutubeLink) || !string.IsNullOrWhiteSpace(Video.VimeoLink)) 330 { 331 string YoutubeID = Video.YoutubeId; 332 string YoutubeLink = Video.YoutubeLink; 333334 string VimeoID = Video.VimeoId; 335 string VimeoLink = Video.VimeoLink; 336337 int CleanVideo = Video.Clean ? 1 : 0; 338 int ShowControls = Video.ShowControls ? 1 : 0; 339 int AutoPlay = Video.AutoPlay ? 1 : 0; 340 int LoopVideo = Video.LoopVideo ? 1 : 0; 341 int MuteAudio = Video.MuteAudio ? 1 : 0; 342 string hideControlsClass = Video.ShowControls ? "video-player-wrapper--hidecontrols" : ""; 343 string origin = Dynamicweb.Environment.Helpers.LinkHelper.GetHttpDomain(); 344 imagesHeight = !string.IsNullOrWhiteSpace(imagesHeight) ? "height: " + imagesHeight + ";" : ""; 345346 if (!string.IsNullOrWhiteSpace(YoutubeLink)) 347 { 348 if(AutoPlay == 1) 349 { 350 <section class="cta-paragraph__video-container" style="@imagesHeight"> 351 <div class=""> 352 <div class="video-player-wrapper @hideControlsClass"> 353 <iframe class="video-player" loading="lazy" data-video="@YoutubeID" frameborder="0" allowfullscreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="YouTube video player" src="https://www.youtube-nocookie.com/embed/@YoutubeID?autoplay=@AutoPlay&controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=0"></iframe> 354 </div> 355 </div> 356 </section> 357 } 358 else 359 { 360 <lite-youtube videoid="@YoutubeID" params="controls=@ShowControls&loop=@LoopVideo&playlist=@YoutubeID&playsinline=1&modestbranding=@CleanVideo&mute=@MuteAudio&rel=0&enablejsapi=1&origin=@origin&disablekb=0"></lite-youtube> 361 } 362 } 363 if (!string.IsNullOrWhiteSpace(VimeoLink)) 364 { 365 <section class="cta-paragraph__video-container" style="@imagesHeight"> 366 <div class=""> 367 <div class="video-player-wrapper"> 368 <iframe class="video-player" loading="lazy" data-video="@VimeoID" frameborder="0" allowfullscreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" title="Vimeo video player" src="https://player.vimeo.com/video/@VimeoID?title=0&byline=0&portrait=0&autoplay=@AutoPlay&controls=@ShowControls&loop=@LoopVideo&muted=@MuteAudio"></iframe> 369 </div> 370 </div> 371 </section> 372 } 373 } 374 } 375376 @helper CTAParagraphIcon(ParagraphIcon Icon, bool strCenterVertical) 377 { 378 if (!string.IsNullOrWhiteSpace(Icon.FaIcon)) 379 { 380 string centerIconClass = strCenterVertical ? "justify-center" : "justify-start"; 381 string iconSizeClass = string.Format("cta-paragraph__icon--{0}", Icon.FaIconSize); 382383 <div class="cta-paragraph__icon-container"> 384 <div class="cta-paragraph__icon-inner-container @centerIconClass"> 385 <span class="cta-paragraph__icon @iconSizeClass">@Icon.FaIcon</span> 386 </div> 387 </div> 388 } 389 } 390391 @helper RenderContentAlignment(BackgroundConfiguration data) 392 { 393394 switch (data.ContentElementAlign) 395 { 396 case "align-left": 397 <text> 398 align-items: flex-start; 399 text-align: left; 400 </text> 401 break; 402 case "align-center": 403 <text> 404 align-items: center; 405 text-align: center; 406 </text> 407 break; 408 case "align-right": 409 <text> 410 align-items: flex-end; 411 text-align: right; 412 </text> 413 break; 414 case "align-full": 415 <text> 416 align-items: flex-start; 417 text-align: justify; 418 </text> 419 break; 420 } 421422 } 423424425 @{ 426427 string backgroundImageRepeatClass = _data.BackgroundConfiguration.BackgroundImageRepeat; 428 string backgroundImageSizeClass = ""; 429430 string BackgroundImagePositionX = _data.BackgroundConfiguration.BackgroundImagePositionX; 431 string BackgroundImagePositionY = _data.BackgroundConfiguration.BackgroundImagePositionY; 432433 string BackgroundImagePositionClass = ""; 434435 if (backgroundImageRepeatClass == "no-repeat") 436 { 437 BackgroundImagePositionClass = BackgroundImagePositionY + "-" + BackgroundImagePositionX; 438 backgroundImageSizeClass = _data.BackgroundConfiguration.BackgroundImageSize; 439 } 440441 string ctaBackgroundColor = _data.BackgroundConfiguration.BackgroundColor; 442443 ctaBackgroundColor = colorService.GetHexColor(Pageview.AreaID, ctaBackgroundColor); 444445 string BackgroundGradient = _data.BackgroundConfiguration.BackgroundGradient; 446447 string contentBackgroundColor = _data.BackgroundConfiguration.contentBackgroundColor; 448 string contentBorderColor = _data.BackgroundConfiguration.contentBorderColor; 449450 string contentBorderSize = _data.BackgroundConfiguration.contentBorderSize + "px"; 451452 string contentGutterClass = _data.BackgroundConfiguration.contentGutter; 453 string BackgroundPadding = _data.BackgroundConfiguration.backgroundPadding; 454455 bool Containerfit = _data.BackgroundConfiguration.ContainerFit == "Fit" ? true : false; 456457 contentBackgroundColor = colorService.GetHexColor(Pageview.AreaID, contentBackgroundColor); 458 contentBorderColor = colorService.GetHexColor(Pageview.AreaID, contentBorderColor); 459460 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : ""; 461 int AnimationDuration = _data.AnimateDuration; 462 string DataAosValue = ""; 463464 switch (AnimateDirection) 465 { 466 case "left": 467 DataAosValue = "fade-left"; 468 break; 469470 case "right": 471 DataAosValue = "fade-right"; 472 break; 473474 case "up": 475 DataAosValue = "fade-up"; 476 break; 477478 case "down": 479 DataAosValue = "fade-down"; 480 break; 481482 case "": 483 case "none": 484 // No action 485 break; 486 } 487488 } 489490 <style> 491 @_data.BackgroundConfiguration.Stylesheet 492 </style> 493494 <style> 495496 @@media screen and (max-width: 991px) { 497 .multicolumn--@paragraphID .multicolumn__item { 498 height: @MobileParagraphHeight !important; 499 } 500 } 501502 @@media screen and (min-width: 991px) { 503 .multicolumn--@paragraphID .multicolumn__item { 504 height: @ParagraphHeight !important; 505 } 506 } 507508 .multicolumn--@paragraphID { 509 background-color: @ctaBackgroundColor; 510 @if (!string.IsNullOrWhiteSpace(BackgroundGradient)) 511 { 512 @BackgroundGradient 513 } 514 } 515516 .multicolumn--@paragraphID .cta-paragraph { 517 background-color: @contentBackgroundColor; 518 border: @contentBorderSize @contentBorderColor solid; 519 } 520521 .multicolumn--@paragraphID .cta-paragraph__content-container 522 { 523 @RenderContentAlignment(_data.BackgroundConfiguration) 524 } 525526 .multicolumn--@paragraphID .cta-paragraph__content { 527 @if (Containerfit) 528 { 529 <text> 530 flex-grow: 0; 531 </text> 532 } 533 } 534535 .multicolumn--@paragraphID .cta-paragraph__image-container { 536 @if (Containerfit) 537 { 538 <text> 539 position: absolute; 540 top: 0; 541 left: 0; 542 right: 0; 543 bottom: 0; 544 </text> 545 } 546 } 547548 .cta-paragraph--@paragraphID .cta-paragraph__btn-navigation { 549 @if (Containerfit) 550 { 551552 switch (_data.BackgroundConfiguration.ContainerFitContentAlignment) 553 { 554555 case "TopLeft": 556 case "MiddleLeft": 557 case "BottomLeft": 558 <text> 559 justify-content: flex-start; 560 </text> 561 break; 562563 case "TopRight": 564 case "MiddleRight": 565 case "BottomRight": 566 <text> 567 justify-content: flex-end; 568 </text> 569 break; 570571572 case "TopCenter": 573 case "MiddleCenter": 574 case "BottomCenter": 575 <text> 576 justify-content: center; 577 </text> 578 break; 579580 } 581 } 582583 } 584585 .multicolumn--@paragraphID .cta-paragraph { 586 @if (Containerfit) 587 { 588589 switch (_data.BackgroundConfiguration.ContainerFitContentAlignment) { 590 case "TopLeft": 591 <text> 592 justify-content: flex-start; 593 align-items: flex-start; 594 </text> 595 break; 596 case "TopCenter": 597 <text> 598 justify-content: flex-start; 599 align-items: center; 600 </text> 601 break; 602 case "TopRight": 603 <text> 604 justify-content: flex-start; 605 align-items: flex-end; 606 </text> 607 break; 608 case "MiddleLeft": 609 <text> 610 justify-content: center; 611 align-items: flex-start; 612 </text> 613 break; 614 case "MiddleCenter": 615 <text> 616 justify-content: center; 617 align-items: center; 618 </text> 619 break; 620 case "MiddleRight": 621 <text> 622 justify-content: center; 623 align-items: flex-end; 624 </text> 625 break; 626 case "BottomLeft": 627 <text> 628 justify-content: flex-end; 629 align-items: flex-start; 630 </text> 631 break; 632 case "BottomCenter": 633 <text> 634 justify-content: flex-end; 635 align-items: center; 636 </text> 637 break; 638 case "BottomRight": 639 <text> 640 justify-content: flex-end; 641 align-items: flex-end; 642 </text> 643 break; 644645 } 646647648 } 649650 } 651652 </style> 653654 @if (_data != null) 655 { 656 <div class="multicolumn multicolumn--@paragraphID @backgroundClass @backgroundImageRepeatClass @BackgroundImagePositionClass @backgroundImageSizeClass @contentGutterClass @BackgroundPadding @_data.CssClass" data-paragraphid="@paragraphID" id="@paragraphID" style="@backgroundStyle" data-aos="@DataAosValue" data-aos-duration="@AnimationDuration"> 657658 <div class="multicolumn__container @fullWidthContainerClass"> 659 @if (!string.IsNullOrWhiteSpace(_data.Header.HeaderFormatted())) 660 { 661 <header class="multicolumn__header-wrapper">@_data.Header.HeaderFormatted("cta-paragraph__header")</header> 662 } 663664 @RenderContentArea(_data, paragraphID) 665 </div> 666667 </div> 668 } 669670 @helper RenderContentArea(MultiColumnParagraph _data, int paragraphID) 671 { 672673 if (_data.Paragraphs().Count > 0) 674 { 675676 // string contentElementAlign = _data.BackgroundConfiguration.ContentElementAlign; 677678 int colIndex = 0; 679 var colorService = new ColorSwatchService(); 680681 string centerTextClass = _data.CenterText ? "items-center text-center" : "items-start text-left"; 682 string WarpElementsClass = !string.IsNullOrWhiteSpace(_data.WrapElements) ? _data.WrapElements : ""; 683 double ColumnWidthSize = 1; 684685 bool Shadow = _data.BackgroundConfiguration.contentShadow; 686 string shadowClass = Shadow ? "contentShadow" : ""; 687688 bool enableColumnAnimation = _data.AnimateDelayColumns; 689 string AnimateDirection = !string.IsNullOrWhiteSpace(_data.AnimateDirection) ? _data.AnimateDirection : ""; 690 int AnimationDuration = 0; 691 string DataAosValue = ""; 692693 if (enableColumnAnimation) 694 { 695 AnimationDuration = _data.AnimateDuration; 696 switch (AnimateDirection) 697 { 698 case "left": 699 DataAosValue = "fade-left"; 700 break; 701702 case "right": 703 DataAosValue = "fade-right"; 704 break; 705706 case "up": 707 DataAosValue = "fade-up"; 708 break; 709710 case "down": 711 DataAosValue = "fade-down"; 712 break; 713714 case "": 715 case "none": 716 // No action 717 break; 718 } 719 } 720721 <div class="grid-container @WarpElementsClass"> 722723 @foreach (ParagraphColumn p in _data.Paragraphs()) 724 { 725726 bool hasContent = !string.IsNullOrWhiteSpace(p.Button().ButtonText) || !string.IsNullOrWhiteSpace(p.Content().Text) || !string.IsNullOrWhiteSpace(p.Header().HeaderFormatted()); 727 string ImageContainerFixed = hasContent ? "cta-paragraph__image-container--fixed" : ""; 728 string imagesHeight = hasContent ? _data.ImageHeight.ToString() + "px" : "100%"; 729 imagesHeight = imagesHeight == "0px" ? "auto" : imagesHeight; 730731 if (_data.BackgroundConfiguration.ContainerFit == "Fit") 732 { 733 imagesHeight = "auto"; 734 } 735736 string newWindow = p.Button().NewWindow ? "target='_blank'" : ""; 737 string ariaLabel = !string.IsNullOrWhiteSpace(p.Button().ButtonAriaLabel) ? "aria-label='" + p.Button().ButtonAriaLabel + "'" : ""; 738 bool clickableBlock = !string.IsNullOrWhiteSpace(p.Button().GetLink(Pageview)) && _data.Clickable; 739 string clickableClass = clickableBlock ? "cta-paragraph__container--clickable" : ""; 740741 ColumnWidthSize = GetColumnsize(p.LargeDevices); 742743 var animationDelay = enableColumnAnimation ? colIndex * 100 : 0; 744 colIndex++; 745746 <div class="multicolumn__item grid-@p.SmallDevices md-grid-@p.MediumDevices lg-grid-@p.LargeDevices" data-aos="@DataAosValue" data-aos-duration="@AnimationDuration" data-aos-delay="@animationDelay"> 747748 <section class="cta-paragraph config--@_data.BackgroundConfigurationID @clickableClass @shadowClass"> 749750 @CTAParagraphImage( 751 p.Image(), 752 hasContent, 753 false, 754 null, 755 false, 756 _data.Fullwidth, 757 imagesHeight, 758 ColumnWidthSize 759 ) 760761 @CTAParagraphVideo( 762 p.Video(), 763 imagesHeight 764 ) 765766 @CTAParagraphIcon( 767 p.Icon(), 768 _data.CenterText 769 ) 770771 @CTAParagraphContent( 772 paragraphID, 773 p.Header(), 774 p.Subheader(), 775 p.Content(), 776 p.Button(), 777 p.ExtraButton(), 778 p.Image(), 779 _data.CenterText 780 ) 781782 @if (clickableBlock) 783 { 784 <a href="@p.Button().GetLink(Pageview)" class="cta-paragraph__clickable" @newWindow @ariaLabel></a> 785 } 786787 </section> 788 </div> 789 } 790 </div> 791 } 792793 } 794795796 @functions{ 797798 double GetColumnsize(string DesktopColumnSize) 799 { 800801 double ColumnWidthSize = 1; 802803 switch (DesktopColumnSize) 804 { 805 case "auto": 806 ColumnWidthSize = 1; 807 break; 808809 case "25p": 810 ColumnWidthSize = 0.25; 811 break; 812813 case "33p": 814 ColumnWidthSize = 0.33; 815 break; 816817 case "50p": 818 ColumnWidthSize = 0.5; 819 break; 820821 case "66p": 822 ColumnWidthSize = 0.66; 823 break; 824825 case "75p": 826 ColumnWidthSize = 0.75; 827 break; 828829 case "full": 830 ColumnWidthSize = 1; 831 break; 832 } 833834 return ColumnWidthSize; 835836 } 837838839 // Check if this carousel contains only images (logo slider) 840 bool checkOnlyImages(Carousel _data) 841 { 842843 int amountColumns = _data.CarouselItems.Count; // Amount of the columns in backend, filled by user 844 int emptyColumn = 0; 845846 // Loop through all the columns 847 foreach (var column in _data.CarouselItems) 848 { 849 // If button is empty AND content is empty AND header is empty => this is img only 850 if (string.IsNullOrWhiteSpace(column.Button.ButtonText) && string.IsNullOrWhiteSpace(column.Content.Text) && string.IsNullOrWhiteSpace(column.Header.HeaderFormatted())) 851 { 852 emptyColumn++; 853 } 854 } 855856 bool emptyColumnResult = emptyColumn == amountColumns ? true : false; 857858 return emptyColumnResult; 859860 } 861 } 862863
Wilt u meer weten of een demo aanvragen?
Onze E-Commerce-experts nemen graag vrijblijvend contact met u op.
Aan de slag met E-Commerce
Krachtige oplossingen voor digitale verkoopgroei.
__________
Op zoek naar een partner die uw e-commerce naar een hoger niveau tilt? bluedesk ontwikkelt slimme, schaalbare platformen die naadloos aansluiten op uw processen en ambities.
Onze specialisten combineren technische expertise met strategisch inzicht om gebruiksvriendelijke webshops te bouwen die écht converteren. Van productbeheer en bestelgemak tot omnichannel integraties – wij zorgen dat alles klopt.
Benieuwd wat we voor uw organisatie kunnen betekenen? Neem vandaag nog contact met ons op en ontdek de kracht van doordachte e-commerce.
Ja, ik wil graag een vrijblijvend gesprek
Neem contact op met Barry voor een vrijblijvend gesprek en ontdek de mogelijkheden.
Digitale
groei
Een succesvolle website
Uw webshop op Dynamicweb met doorlopende ondersteuning
__________
Een goedlopende (zakelijke) webshop die bijdraagt aan digitale groei en online succes, daar zorgen de E-Commerce specialisten van bluedesk voor.
Onze experts realiseren die uw webshop op het all-in-one platform Dynamicweb.
Na oplevering staat bluedesk voor u klaar om operationele problemen snel en adequaat op te lossen en uw platform door te ontwikkelen en optimalisatiemogelijkheden te benutten.

B2C E-Commerce
Een B2C E-Commerce platform dat zorgt voor uw groei en bijdraagt aan het online marktleiderschap.

Corporate websites
Een converterend online visitekaartje van uw bedrijf dat volledig aansluit op uw huisstijl.

Turnkey E-Commerce
Met de Turnkey E-Commerce oplossing van bluedesk heeft u een compleet ingerichte webshop gekoppeld met uw ERP en PIM data.

Business Applicaties
Applicaties die uw klanten of medewerkers helpen bij hun dagelijkse werkzaamheden. Als responsive web-, hybrid- of native app én geïntegreerd met uw bedrijfssystemen.

Integraties
bluedesk koppelt uw huidige bedrijfssystemen (ERP, CRM, CMS, PIM) eenvoudig aan uw e-business of E-Commerce platform om uw bedrijfsprocessen te optimaliseren.
Onze E-Commerce specialisten
Wij realiseren complete, geïntegreerde online funnels.
__________
Onze specialisten zorgen voor een naadloze koppeling tussen uw e-commerceplatform en bedrijfsprocessen. Zo profiteren uw klanten van een soepele, consistente online ervaring.
Of het nu B2B of B2C is – wij zorgen dat alles klopt: van productweergave tot orderverwerking.
Uw E-Commerce in goede handen:
Koppelingen met ERP, PIM, CRM en andere bedrijfssystemen
Eén centraal platform voor verkoop, service en klantcommunicatie
Ruime ervaring met complexe integraties en schaalbare oplossingen
Strategie, implementatie en optimalisatie onder één dak
bluedesk helpt u groeien met slimme E-Commerce-oplossingen die écht werken – voor meer omzet, tevreden klanten en minder handwerk.

Sonic Equipment
PIM Connect APP - PIM Implementatie
Voor Sonic Equipment is een PIM gerealiseerd waar alle informatie van alle producten gemakkelijk in 1 app zichtbaar zijn.

ProNails
Een nieuwe internationale digital hub. Een e-business platform waar e-commerce, PIM en ERP samenkomen met de mogelijkheid tot marketingopties.

Zevij-Necomij
Turnkey E-Commerce oplossing
Samen met Zevij-Necomij ontwikkelde bluedesk een Turnkey E-Commerce oplossing speciaal voor Zevij-Necomij leden. Deze oplossing bevat de beste conversieuitgangspunten om online de concurrentieslag te winnen.

Sonic Equipment

ProNails

Zevij-Necomij
Sonic Equipment
ProNails
Zevij-Necomij
.png)














