Error executing template "Designs/tvilum/eCom/Product/tvilum.cshtml"System.Exception: Product is not embedded in a list and does not have a variant id or a primary variant idat Co3.Espresso.Website.Models.FrontEnd.Ecommerce.EspressoProduct.Populate(ProductSettings settings)at Co3.Espresso.Website.Services.ProductService.GetEspressoProduct(ProductSettings settings)at CompiledRazorTemplates.Dynamic.RazorEngine_4d55e8adf87646c198748dec7f814e9e.Execute() in E:\Solutions\Tvilum\Files\Templates\Designs\tvilum\eCom\Product\tvilum.cshtml:line 33at 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.b__0(TextWriter writer)at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)at Dynamicweb.Rendering.Template.RenderRazorTemplate()
  1	@inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module  2	@using System.Activities.Expressions  3	@using System.Dynamic  4	@using System.Security.Cryptography.X509Certificates  5	@using System.Web  6	@using System.Web.Services.Description  7	@using Co3.Espresso.Website.Services  8	@using Co3.Espresso.Website.Models.FrontEnd  9	@using Co3.Espresso.Website.Models.FrontEnd.Settings 10	@using Co3.Espresso.Website.Models.FrontEnd.Ecommerce 11	@using Co3.Espresso.Website.Models.FrontEnd.Handlebars 12	@using Dynamicweb.Rendering 13	@using Dynamicweb.Security.UserManagement 14	@using Co3.Tvilum.Website.Models.Frontend.Ecommerce 15	@using Dynamicweb.Content 16	@using Dynamicweb.DataIntegration.Providers.DynamicwebViewProvider 17	@using Dynamicweb.Ecommerce 18	@using Dynamicweb.Ecommerce.Common 19	@using Dynamicweb.Ecommerce.Products 20	@using Dynamicweb.Ecommerce.Products.Categories 21	@using Dynamicweb.Ecommerce.Products.FieldDisplayGroups 22	@using Dynamicweb.Frontend 23	@using Dynamicweb.Rendering.Translation 24	@using ParagraphService = Dynamicweb.Content.ParagraphService 25	@using ProductService = Co3.Espresso.Website.Services.ProductService 26	@using Co3.Tvilum.Utilities.Extensions 27	@using Dynamicweb.Core 28 29	@{ 30	    int phase = 1; 31	    bool isUserAuthenticated = User.IsExtranetUserLoggedIn(); 32	    isUserAuthenticated = true; 33	    TvilumProduct espressoProduct = ( TvilumProduct ) ProductService.Instance.GetEspressoProduct( 34	        new ProductSettings() 35	        { 36	            Id = GetString( "Ecom:Product.ID" ), 37	            VariantId = GetString( "Ecom:Product.VariantID" ), 38	            PrimaryVariantId = GetString( "Ecom:Product.DefaultVariantComboID" ) 39	        } 40	    ); 41 42	    // ADD CUSTOM CANONICAL 43	    string eComProductCanonical = string.Empty; 44	    string globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ); 45	    if ( GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) > -1 ) 46	    { 47	        globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ).Substring( 0, GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) ); 48	        eComProductCanonical = String.Format( "{0}", globalValueUrl ); 49	        Pageview.Meta.AddTag( "customCan", string.Format( "<link rel=\"canonical\" href=\"{0}\" />", eComProductCanonical ) ); 50	    } 51 52	    int EcommerceProductBannerPageID = 0; 53	    int.TryParse( PageView.Current().Area.Item[ "EcommerceProductBannerPage" ]?.ToString(), out EcommerceProductBannerPageID ); 54 55	    string cssClassBannerColumns = string.Empty; 56	    List< Paragraph > bannerParagraphs = new List< Paragraph >(); 57	    ParagraphService paragraphService = new ParagraphService(); 58	    Paragraph seriePrimaryRoomParagraph = null; 59	    Paragraph serieParagraph = null; 60	    Paragraph furnitureTypeParagraph = null; 61 62	    if ( EcommerceProductBannerPageID > 0 ) 63	    { 64	        string primaryRoom = espressoProduct.PrimaryRoom; 65	        string serie = espressoProduct.Serie; 66	        string furnitureType = espressoProduct.FurnitureType; 67 68	        IEnumerable< Paragraph > paragraphs = paragraphService.GetParagraphsByPageId( EcommerceProductBannerPageID ).Where(p => p.ShowParagraph); 69	        foreach ( Paragraph paragraph in paragraphs ) 70	        { 71	            if ( paragraph.Item[ "Serie" ]?.ToString() == serie && paragraph.Item[ "PrimaryRoom" ]?.ToString() == primaryRoom ) 72	            { 73	                seriePrimaryRoomParagraph = paragraph; 74	            } 75 76	            if ( paragraph.Item[ "Serie" ]?.ToString() == serie ) 77	            { 78	                serieParagraph = paragraph; 79	            } 80 81	            if ( furnitureTypeParagraph == null && paragraph.Item[ "FurnitureType" ]?.ToString() == furnitureType ) 82	            { 83	                furnitureTypeParagraph = paragraph; 84	            } 85 86	            if ( seriePrimaryRoomParagraph != null && furnitureTypeParagraph != null && serieParagraph != null ) 87	            { 88	                break; 89	            } 90	        } 91 92	        if ( seriePrimaryRoomParagraph == null ) 93	        { 94	            seriePrimaryRoomParagraph = serieParagraph; 95	        } 96 97	        if ( seriePrimaryRoomParagraph != null ) 98	        { 99	            bannerParagraphs.Add( seriePrimaryRoomParagraph );100	        }101102	        if ( furnitureTypeParagraph != null )103	        {104	            bannerParagraphs.Add( furnitureTypeParagraph );105	        }106107	        if ( bannerParagraphs.Count() == 2 )108	        {109	            cssClassBannerColumns = "col-lg-6 col-xl-6";110	        }111112	    }113114	    string jsDataPropertyPath = espressoProduct.Id;115116	    // TODO: En eller anden skriv en kommentar om at følgende skal udkommenteres hvis man ikke skal bruge dem.117	    espressoProduct.RelatedGroups.Add( espressoProduct.CustomersWhoBoughtThisItemAlsoBought.Id, espressoProduct.CustomersWhoBoughtThisItemAlsoBought );118119	    // Related group IDs in order of template output120	    string[] relatedGroupIds =121	    {122	        "RELGRP5",123	        "CustomersWhoBoughtThisItemAlsoBought",124	        "RELGRP4"125	    };126	}127128	@RenderingService.Instance.SectionEnd()129130	<script> var jsonfeed = @JsonService.Instance.ToJson(espressoProduct);</script>131132	<div class="e-product js-e-product" data-product-id="@espressoProduct.Id" data-has-variants="@espressoProduct.HasVariants.ToString().ToLower()" data-variant-id="@espressoProduct.VariantId">133134	@RenderingService.Instance.SectionStart( new SectionSettings135	                                         {136	                                             Classes = new ClassList( "e-section pb-2" )137	                                         } )138139	<div class="col-12">140	    <div class="row">141	        <div class="align-self-center col-12 col-lg-6 col-md-8">142	            <div class="e-product-text-container">143	                <div class="mb-1 row">144	                    <div class="col-6">145	                        <p class="mb-0 small js-e-product-number">146	                            @espressoProduct.Number147	                        </p>148	                    </div>149150	                    @if ( isUserAuthenticated )151	                    {152153	                    <div class="col-6 text-right">154	                        @RenderingService.Instance.PartialView( "ecom/product/partials/tvilum-add-to-favorites.cshtml", espressoProduct )155	                    </div>156	                    }157	                </div>158159	                <h1 class="e-product-name mt-0 js-e-product-name">160	                    @espressoProduct.Name@* - @espressoProduct.TvilumColourNames.Replace(",", " / ")*@161	                </h1>162163	                <div class="e-product-text mb-2 small">164	                    <ul>165	                        @foreach ( FieldDisplayGroupItem ksp in espressoProduct.Ksps )166	                        {167	                            <li>@ksp.Value</li>168	                        }169	                    </ul>170	                    @if ( !string.IsNullOrEmpty( espressoProduct.DescriptionShort ) )171	                    {172	                        <p>@espressoProduct.DescriptionShort</p>173	                    }174	                    @if ( !string.IsNullOrEmpty( espressoProduct.DescriptionLong ) )175	                    {176	                        <p>@espressoProduct.DescriptionLong</p>177	                    }178	                </div>179180	                @if ( isUserAuthenticated && phase > 1 )181	                {182	                    <div class="bg-light col-12 my-3 pb-1 pt-2 px-2 small">183	                        <div class="row">184	                            <div class="col-12 col-lg-6 pr-lg-4">185	                                <span class="text-black font-heading">@Translate("eCom Product - Unit price - Label", "Stykpris")</span>186	                                <div class="d-flex mt-1 w-100">187	                                    <span class="mb-1 w-50">9.995 dkk / stk</span>188	                                    <span class="mb-1 text-right w-50">v. 1 stk</span>189	                                </div>190	                                <div class="d-flex w-100">191	                                    <span class="mb-1 w-50">9.495 dkk / stk</span>192	                                    <span class="mb-1 text-right w-50">v. 5 stk</span>193	                                </div>194	                            </div>195	                            <div class="col-12 col-lg-6 mt-2 mt-lg-0">196	                                <span class="text-black font-heading">Pallepris</span>197	                                <div class="d-flex mt-1 w-100">198	                                    <span class="mb-1 w-50">8.995 dkk / stk</span>199	                                    <span class="mb-1 text-right w-50">pr. 10 stk (1 palle)</span>200	                                </div>201	                                <p class="small">@Translate("eCom Product - Unit price info - Text", "Gælder for antal svarende til en hel palle. Antal udover hele paller sælges til stykpriser.")</p>202	                            </div>203204	                        </div>205	                    </div>206	                }207208	<div class="row">209	    @if ( isUserAuthenticated && phase > 1 )210	    {211	        <div class="col-12 col-xl-5">212	            <p class="e-product-price h2 mb-0 mt-0">213	                @espressoProduct.Price.Format()214	            </p>215	            @RenderingService.Instance.PartialView( "ecom/product/partials/tvilum-delivery-info.cshtml", espressoProduct )216	        </div>217	    }218	    <div class="col-12 col-xl-7">219	        @RenderingService.Instance.PartialView( "ecom/product/partials/tvilum-add-to-cart.cshtml", espressoProduct )220	    </div>221	</div>222223224	            </div>225	        </div>226	        <div class="col-12 col-lg-6 col-md-4 order-first">227	            @RenderingService.Instance.PartialView( "ecom/product/partials/tvilum-images.cshtml", espressoProduct )228	        </div>229	    </div>230	</div>231	@RenderingService.Instance.SectionEnd()232233	@{234	    string jsonRelatedItemsSrc = espressoProduct.Id;235	    string relatedItemsHandlebarsTemplateName = "product-related-items";236	    HandlebarsProductListItemTemplate handlebarsProductListRelatedItemTemplate = HandlebarsService.Instance.GetProductListItemTemplate( new HandlebarsProductListItemTemplateSettings() );237238	    <div class="js-e-jsonpublisher js-e-product-related-items-container" data-json-src="@jsonRelatedItemsSrc" data-template=".js-e-handlebars-tmpl-@relatedItemsHandlebarsTemplateName" data-template-helpers="counter">239	        <script class="js-e-handlebars-tmpl-@relatedItemsHandlebarsTemplateName" type="text/x-handlebars-template">240	        {{#if relatedItems}}241	            @RenderingService.Instance.SectionStart( new SectionSettings242	                                                 {243	                                                     Classes = new ClassList( "e-section py-2 mb-6 bg-light" )244	                                                 } )245246	            <div class="col-12">247	                <div class="e-productlist-header">248	                    <p class="h2 text-left">@Translate( "eCom Product - RelatedItems - Heading", "Består af" )</p>249	                </div>250	                <div class="e-productlist-main">251	                    <div class="row">252	                        <div class="col-12">253	                            <div class="e-productlist custom-tvilum-productlist-details-margin">254	                                <div class="row justify-content-center">255	                                {{#each relatedItems}}256	                                    @RenderingService.Instance.PartialView( "ecom/productlist/partials/item.cshtml", handlebarsProductListRelatedItemTemplate )257	                                {{/each}}258	                                </div>259	                            </div>260	                        </div>261	                    </div>262	                </div>263	            </div>264	            @RenderingService.Instance.SectionEnd()265	        {{/if}}266	        </script>267	    </div>268	}269270	@if ( !string.IsNullOrEmpty( espressoProduct.DescriptionLong ) )271	{272	    @RenderingService.Instance.SectionStart( new SectionSettings273	                                             {274	                                                 Classes = new ClassList( "e-section" ),275	                                                 ContentClasses = new ClassList( "col-12 col-md-10 col-lg-6 mx-auto is-lg" ),276	                                                 Collapsible = false277	                                             } )278	    <div class="col-12">279	        <h2>@Translate("eCom Product - Description - Label", "Beskrivelse")</h2>280	        @espressoProduct.DescriptionLong281	    </div>282	    @RenderingService.Instance.SectionEnd()283	}284285286	@RenderingService.Instance.SectionStart( new SectionSettings287	                                         {288	                                             Classes = new ClassList( "e-section mb-6" ),289	                                             ContentClasses = new ClassList( "col-12 col-md-10 col-lg-6 mx-auto is-lg" ),290	                                             Collapsible = false291	                                         } )292293294	<div class="col-12 mt-4">295	<h2>@Translate("eCom Product - Specifications - Label", "Specifikationer")</h2>296	<div class="js-e-jsonpublisher js-tvilum-product-specifications-container" data-json-src="@espressoProduct.Id" data-template=".js-e-handlebars-tmpl-tvilum-product-specifications" data-template-helpers="counter">297	    <script class="js-e-handlebars-tmpl-tvilum-product-specifications" type="text/x-handlebars-template">298	        <table class="my-2 table tvilum-product-specifications">299	            <tbody>300	            {{#each PrimarySpecifications}}301	            <tr>302	                <th scope="row">{{{Label}}}</th>303	                <td>{{{Value}}}</td>304	            </tr>305	            {{/each}}306	            </tbody>307	        </table>308	    </script>309	</div>310	<button class="btn btn-primary mt-1 js-tvilum-product-specifications-btn" data-target="#tvilumSpecifications" data-toggle="modal" type="button">311	    @Translate("eCom Product - See All Specifications - Label", "Se alle specifikationer")<span class="icon-large material-icons pl-3">launch</span>312	</button>313314	<!-- Modal -->315	<div aria-hidden="true" aria-labelledby="specifications" class="fade modal js-tvilum-product-specifications-modal tvilum-product-specifications-modal" data-productid="@espressoProduct.Id" data-variantid="@espressoProduct.VariantId" id="tvilumSpecifications" role="dialog" tabindex="-1">316	    <div class="modal-dialog" role="document">317	        <div class="modal-content">318	            <div class="modal-header">319	                <span class="tvilum-modal-heading-wrapper">320	                    <p class="h3 mb-0 text-muted">@Translate("eCom Product - All Specifications - Label", "Alle specifikationer")</p>321	                    <h2 class="modal-title mt-0" id="tvilumSpecificationsTitle">@espressoProduct.Name</h2>322	                </span>323	                <div class="e-search-input-group is-empty h-100 mx-lg-5">324	                    <input class="e-search-input form-control-plaintext" id="tvilum-product-details-search-input" name="q" placeholder="@Translate("eCom Product - Search for specification - Text", "Søg efter specifikation")" type="text">325	                    <span class="e-search-clear js-tvilum-product-details-search-clear"><i class="material-icons">close</i></span>326	                    <button id="tvilum-product-details-search-btn" class="btn e-search-submit m-0 py-0" type="submit">327	                        <i class="material-icons">search</i>328	                    </button>329	                </div>330	                <button aria-label="Close" class="close" data-dismiss="modal" type="button">331	                    <span aria-hidden="true">×</span>332	                </button>333	            </div>334	            <div class="modal-body">335	                <div class="e-loading-overlay js-e-loading-overlay">336	                    @RenderingService.Instance.PartialView( "_partials/loading-spinner.cshtml" )337	                </div>338	                <div class="container-fluid">339	                    <div class="row js-e-jsonpublisher js-tvilum-product-specifications-modal-container" data-json-src="@espressoProduct.Id" data-template=".js-e-handlebars-tmpl-tvilum-product-specifications-modal" data-template-helpers="counter compare">340	                        <script class="js-e-handlebars-tmpl-tvilum-product-specifications-modal" type="text/x-handlebars-template">341	                        {{#if groups.length}}342	                        <div class="col-4 col-lg-3 d-md-block d-none pl-0">343	                            <h3 class="text-muted">@Translate( "eCom Product - Select - Label", "Vælg" ):</h3>344	                            <ul class="tvilum-custom-product-details-modal-localmenu">345	                                {{#each groups}}346	                                <li {{#compare @@index '===' 0 }}class="active"{{/compare}}>347	                                    <a href="#attributes-group-{{@@index}}" class="js-scroll-to-specifications">{{{name}}}</a>348	                                </li>349	                                {{/each}}350	                            </ul>351	                        </div>352353	                        <div class="col-12 col-lg-9 col-md-8 js-scroll-container scroll-container">354	                            <div class="row">355	                                <div class="col-12">356	                                {{#each groups}}357	                                    {{log this}}358359	                                    <h2 id="attributes-group-{{@@index}}">{{{name}}}</h2>360	                                    <table class="mb-4 table tvilum-product-specifications">361	                                        <tbody>362	                                        {{#each fields}}363	                                            <tr>364	                                                <th scope="row">{{{label}}}</th>365	                                                <td>{{{value}}}</td>366	                                            </tr>367	                                        {{/each}}368369	                                        {{#compare subGroups.length '>' 0}}370	                                        {{#each subGroups}}371	                                            <tr>372	                                                <th scope="row" class="h3 pt-2 border-0">{{{name}}}</th>373	                                                <td class="border-0"></td>374	                                            </tr>375	                                            {{#each fields}}376	                                                <tr>377	                                                    <th scope="row">{{{label}}}</th>378	                                                    <td>{{{value}}}</td>379	                                                </tr>380	                                            {{/each}}381	                                        {{/each}}382	                                        {{/compare}}383384	                                        </tbody>385	                                    </table>386	                                {{/each}}387	                                </div>388	                            </div>389	                        </div>390	                        {{else}}391	                        <p class="d-block my-3 text-center w-100">@Translate("eCom Product - Specifications no result - text", "Din søgning gav desværre ingen resultater...")</p>392	                        {{/if}}393	                        </script>394	                    </div>395	                </div>396	            </div>397	        </div>398	    </div>399	</div>400	</div>401	</div>402403	@RenderingService.Instance.SectionEnd()404405	@if ( espressoProduct.Downloads.Any() )406	{407	@RenderingService.Instance.SectionStart( new SectionSettings408	                                         {409	                                             Classes = new ClassList( "e-section mb-6" ),410	                                             ContentClasses = new ClassList( "col-12 col-md-10 col-lg-6 mx-auto is-lg" ),411	                                             Collapsible = false412	                                         } )413	    <div class="col-12">414	        <h2>Downloads</h2>415	        <ul class="small tvilum-product-specifications-download">416	            @foreach ( FieldDisplayGroupItem download in espressoProduct.Downloads )417	            {418	                <li>419	                    <a target="_blank" href="@string.Format("//tvilum.com/files/files/tvilum/{0}.pdf", download.Value)"><span class="material-icons">get_app</span> @download.Label</a>420	                </li>421	            }422	        </ul>423	    </div>424	    @RenderingService.Instance.SectionEnd()425	}426427	@{428	    string jsonPrimaryComplementaryItemsSrc = espressoProduct.Id;429	    string primaryComplementaryItemsHandlebarsTemplateName = "product-primary-complementary-items";430	    HandlebarsProductListItemTemplate handlebarsProductListPrimaryComplementaryItemsTemplate = HandlebarsService.Instance.GetProductListItemTemplate( new HandlebarsProductListItemTemplateSettings() );431432	    <div class="js-e-jsonpublisher js-e-product-primary-complementary-items-container" data-json-src="@jsonPrimaryComplementaryItemsSrc" data-template=".js-e-handlebars-tmpl-@primaryComplementaryItemsHandlebarsTemplateName" data-template-helpers="counter">433	        <script class="js-e-handlebars-tmpl-@primaryComplementaryItemsHandlebarsTemplateName" type="text/x-handlebars-template">434	        {{#if primaryComplementaryItems}}435	            @RenderingService.Instance.SectionStart( new SectionSettings436	                                                     {437	                                                         Classes = new ClassList( "e-section py-3 bg-light" )438	                                                     } )439440	            <div class="col-12">441	                <div class="e-productlist-header">442	                    <p class="h2 text-left">@Translate( "eCom Product - PrimaryComplementaryItems - Heading", "Tilbehør" )</p>443	                </div>444	                <div class="e-productlist-main">445	                    <div class="row">446	                        <div class="col-12">447	                            <div class="e-productlist custom-tvilum-productlist-details-margin">448	                                <div class="row justify-content-center">449	                                {{#each primaryComplementaryItems}}450	                                    @RenderingService.Instance.PartialView( "ecom/productlist/partials/item.cshtml", handlebarsProductListPrimaryComplementaryItemsTemplate )451	                                {{/each}}452	                                </div>453	                            </div>454	                        </div>455	                    </div>456	                </div>457	            </div>458	            @RenderingService.Instance.SectionEnd()459	        {{/if}}460461	        </script>462	    </div>463	}464465466	@{467	    string jsonSecondaryComplementaryItemsSrc = espressoProduct.Id;468	    string secondaryComplementaryItemsHandlebarsTemplateName = "product-secondary-complementary-items";469	    HandlebarsProductListItemTemplate handlebarsProductListSecondaryComplementaryItemsTemplate = HandlebarsService.Instance.GetProductListItemTemplate( new HandlebarsProductListItemTemplateSettings() );470	    <div class="js-e-jsonpublisher js-e-product-secondary-complementary-items-container" data-json-src="@jsonSecondaryComplementaryItemsSrc" data-template=".js-e-handlebars-tmpl-@secondaryComplementaryItemsHandlebarsTemplateName" data-template-helpers="counter">471	        <script class="js-e-handlebars-tmpl-@secondaryComplementaryItemsHandlebarsTemplateName" type="text/x-handlebars-template">472	        {{#if secondaryComplementaryItems}}473	            @RenderingService.Instance.SectionStart( new SectionSettings474	                                                     {475	                                                         Classes = new ClassList( "e-section py-3" )476	                                                     } )477478	            <div class="col-12">479	                <div class="e-productlist-header">480	                    <p class="h2 text-left">@Translate( "eCom Product - SecondaryComplementaryItems - Heading", "Passer til" )</p>481	                </div>482	                <div class="e-productlist-main">483	                    <div class="row">484	                        <div class="col-12">485	                            <div class="e-productlist custom-tvilum-productlist-details-margin">486	                                <div class="row justify-content-center">487	                                {{#each secondaryComplementaryItems}}488	                                    @RenderingService.Instance.PartialView( "ecom/productlist/partials/item.cshtml", handlebarsProductListSecondaryComplementaryItemsTemplate )489	                                {{/each}}490	                                </div>491	                            </div>492	                        </div>493	                    </div>494	                </div>495	            </div>496	            @RenderingService.Instance.SectionEnd()497	        {{/if}}498499	        </script>500	    </div>501	}502503	@if ( espressoProduct.RelatedGroups[ key: relatedGroupIds[ 1 ] ].Products.Any() )504	{505	    HandlebarsProductListItemTemplate handlebarsProductListItemTemplate = HandlebarsService.Instance.GetProductListItemTemplate( new HandlebarsProductListItemTemplateSettings() );506	    string handlebarsTemplateName = string.Format( "{0}-{1}-{2}", espressoProduct.Id, "related-group", espressoProduct.RelatedGroups[ key: relatedGroupIds[ 1 ] ].Id ).ToLower();507	    string jsonSrc = string.Format( "{0}.{1}.{2}", jsDataPropertyPath, "relatedGroups", espressoProduct.RelatedGroups[ key: relatedGroupIds[ 1 ] ].Id );508509	    @RenderingService.Instance.SectionStart( new SectionSettings510	                                             {511	                                                 Classes = new ClassList( "e-section py-2 bg-light" )512	                                             } )513	    <div class="col-12">514	        <div class="e-productlist js-e-jsonpublisher" data-json-src="@jsonSrc" data-json-src-prop="" data-json-template-prop="" data-json-item-count="4" data-json-item-count-prop="products" data-template=".js-e-handlebars-tmpl-@handlebarsTemplateName">515516	            <script class="js-e-handlebars-tmpl-@handlebarsTemplateName" type="text/x-handlebars-template">517	                    <div class="e-productlist-header">518	                      <p class="h2 text-left">{{name}}</p>519	                    </div>520	                    <div class="e-productlist-main">521	                      <div class="row">522	                        <div class="col-12">523	                          <div class="e-productlist custom-tvilum-productlist-details-margin">524	                            {{#if products}}525	                              <div class="row justify-content-center">526	                                {{#each products}}527	                                  @RenderingService.Instance.PartialView( "ecom/productlist/partials/item.cshtml", handlebarsProductListItemTemplate )528	                                {{/each}}529	                              </div>530	                            {{/if}}531	                          </div>532	                        </div>533	                      </div>534	                    </div>535	                  </script>536537	        </div>538	    </div>539	    @RenderingService.Instance.SectionEnd()540	}541542543	@if ( espressoProduct.RelatedGroups.ContainsKey(relatedGroupIds[ 2 ]) )544	{545	    if ( espressoProduct.RelatedGroups[ key: relatedGroupIds[ 2 ] ].Products.Any() )546	    {547	        HandlebarsProductListItemTemplate handlebarsProductListItemTemplate = HandlebarsService.Instance.GetProductListItemTemplate( new HandlebarsProductListItemTemplateSettings() );548	        string handlebarsTemplateName = string.Format( "{0}-{1}-{2}", espressoProduct.Id, "related-group", espressoProduct.RelatedGroups[ key: relatedGroupIds[ 2 ] ].Id ).ToLower();549	        string jsonSrc = string.Format( "{0}.{1}.{2}", jsDataPropertyPath, "relatedGroups", espressoProduct.RelatedGroups[ key: relatedGroupIds[ 2 ] ].Id );550551	        @RenderingService.Instance.SectionStart( new SectionSettings552	                                                 {553	                                                     Classes = new ClassList( "e-section py-2" )554	                                                 } )555	        <div class="col-12">556	            <div class="e-productlist tvilum-custom-productlist js-e-jsonpublisher" data-json-src="@jsonSrc" data-json-src-prop="" data-json-template-prop="" data-json-item-count="4" data-json-item-count-prop="products" data-template=".js-e-handlebars-tmpl-@handlebarsTemplateName">557558	                <script class="js-e-handlebars-tmpl-@handlebarsTemplateName" type="text/x-handlebars-template">559	                          <div class="e-productlist-header">560	                            <p class="h2 mb-2 text-left">{{name}}</p>561	                          </div>562	                          <div class="e-productlist-main">563	                            <div class="row">564	                              <div class="col-12">565	                                <div class="e-productlist custom-tvilum-productlist-details-margin">566	                                  {{#if products}}567	                                    <div class="row justify-content-center">568	                                      {{#each products}}569	                                        @RenderingService.Instance.PartialView( "ecom/productlist/partials/item.cshtml", handlebarsProductListItemTemplate )570	                                      {{/each}}571	                                    </div>572	                                  {{/if}}573	                                </div>574	                              </div>575	                            </div>576	                          </div>577	                        </script>578579	            </div>580	        </div>581	        @RenderingService.Instance.SectionEnd()582	    }583	}584585586	<section class="e-section p p-0 p-section">587	<div class="container-fluid overflow-hidden px-0">588	<div class="no-gutters row">589590	    @{591	        foreach ( Paragraph bannerParagraph in bannerParagraphs )592	        {593	            string title = bannerParagraph.Item[ "Title" ]?.ToString();594	            if ( string.IsNullOrEmpty( title ) )595	            {596	                title = bannerParagraph.Item[ "FurnitureType" ]?.ToString();597	            }598	            string linkText = bannerParagraph.Item[ "LinkText" ]?.ToString();599	            string link = bannerParagraph.Item[ "Link" ]?.ToString();600	            string image = string.Format( "/admin/public/getimage.ashx?Image={0}&Width=3840&Height=0&Format=jpg&Quality=75&Crop=0", bannerParagraph.Item[ "Image" ] );601602	            <div class="p p-tile-height-sm p-tile p-tile-padding-bottom-30 e-block-link js-e-block-link e-theme-light p-tile-img p-tile-txt-medium p-tile-left-middle e-text-light col-12 col-sm-12 col-md-12 @cssClassBannerColumns">603	                <div class="p-tile-container">604	                    <div class="p-img-container">605	                        <div class="bg-center-middle p-img" style="background-image: url('@image');" title=""></div>606	                    </div>607	                    <div class="p-txt-container">608	                        <div class="container-fluid">609	                            <div class="p-txt-wrapper row">610	                                <div class="col-xl-9">611	                                    <h2 class="h1">@title</h2>612	                                    @if ( !string.IsNullOrEmpty( link ) && !string.IsNullOrEmpty( linkText ) )613	                                    {614	                                        <p>615	                                            <a class="btn btn-primary" href="@link">@linkText</a>616	                                        </p>617	                                    }618	                                </div>619	                            </div>620	                        </div>621	                    </div>622	                </div>623	            </div>624	        }625	    }626627	    @RenderingService.Instance.SectionEnd()628629	    @RenderingService.Instance.PartialView( "ecom/product/partials/metadata.cshtml", espressoProduct )630	    @RenderingService.Instance.PartialView( "ecom/product/partials/gtm-tracking.cshtml", espressoProduct )631632	    <code class="js-e-breadcrumb-item-append" data-text="@HttpUtility.HtmlAttributeEncode( espressoProduct.Name )" data-link="@HttpUtility.HtmlAttributeEncode( espressoProduct.Link )"></code>633634	    <script>635	        e4.data.set('@jsDataPropertyPath',636	            JSON.parse('@HttpUtility.JavaScriptStringEncode( JsonService.Instance.ToJson( espressoProduct ) )'))637	    </script>638639	</div>640	@RenderingService.Instance.SectionStart( new SectionSettings() )641