Eva Trio:
From kitchen revolution to design icon
In his first sketches of the Eva Trio cookware, Ole Palsby introduced an innovative design concept
A classic in your kitchen
From designer Ole Palsby’s innovative visions in the 1970s to its status as a standard household item in every other Danish kitchen – Eva Trio’s cookware has joined the ranks of timeless Danish design classics. Read on for the story behind it all.
Eva Trio has been keeping pots on the boil for more than 40 years. Around one in two Danish households has at least one pot or pan from this popular line, and Eva Trio is just as influential among the culinary elites; when the Danish Chef of the Year and the National Culinary Team of Denmark train for prestigious competitions like the Bocuse d’Or, their preferred cookware is made by Eva Trio.
Standing the test of time, this iconic Danish cookware has retained its original design lines. So, how can a concept and design dating back to the mid-1970s go the distance, given the rapidly evolving demands of contemporary cuisine?
The answer is credibility and convincing standards in terms of both utility value and aesthetics.
Pots and pans are such obvious practical essentials that we rarely appreciate the design time and effort that go into every single piece of cookware. The Eva Trio story, though, is a shining example of how logic, care and not least innovation can turn rigid notions into something more advantageous.
This is the story of how a true Danish design classic came about.
A shop shuts and a door opens wide
In the mid-1970s, Ole Palsby was the owner of a specialist kitchenware store in Copenhagen. In those days, such stores were a rarity, and Palsby was undoubtedly a pioneer in that trade. But he was ahead of his time because demand was low, and by the end of 1975, Palsby had no choice but to shut up shop.
On the closing day, Palsby was visited by Erik Mangor, then CEO of Eva Solo. Mangor, familiar with Palsby’s inventiveness and high standards, commissioned him to “design some pots and pans superior to known international brands”.
Palsby rose to the challenge, and the partnership that followed was a game changer, revolutionising the world of kitchenware.
“Because Eva Trio is a household brand now, it’s hard for us to imagine how radical an innovation it was back in the day. But Eva Trio was the culmination of a design ethos dating back several centuries. Ole Palsby drew on all the kitchenware know-how that had been amassed over the years, and brought it all together in one unified line”, enthused Michael Sheridan, one of the world’s leading experts on Danish Design in comments to the national broadsheet, Berlingske, in 2014.
The man behind Eva Trio
Ole Palsby (1935-2010), who had dispensed with any formal training, was one of the most eminent Danish proponents of the functionalist tradition. For more than 35 years, he maintained his standing as one of Denmark’s most successful and celebrated designers of kitchenware and tableware.
Instead of merely “designing”, Palsby preferred “making best effort”. His approach to design and innovation was democratic; his ethos being that design excellence should be affordable.
In 2000, Palsby was knighted by HRH the Queen of Denmark, and in 2004 he was awarded a diploma by the Danish Gastronomical Academy.
Palsby passed away in 2010, but his design lives on in his work for Eva Trio and other renowned brands like Alfi, Ittala and Rosendahl.
Professional-grade design for the home
Before putting pen to sketchpad, Palsby would carry out a painstaking needs analysis to identify the most suitable materials for various cooking techniques. The conclusion was clear: no single material could cater for every dish. Because no one would dream of boiling an egg in a cast iron pot or cooking potatoes in a copper pan.
Traditionally, only one single, specific metal was used in manufacturing a whole cookware line, but Palsby challenged that convention. He introduced the concept of cookware made of multiple metals, but which conformed to consistent design principles for a unified kitchenware aesthetic.
He based the line on three core materials – copper, aluminium and cast iron – each with their respective properties; hence the name “Trio”.
Not that the entire line was offered in either one or other material; instead, the various materials were carefully chosen for each piece of cookware, depending on their particular advantages and drawbacks.
The cast iron was used for frying pans because of its excellent heat retention, making it ideal for prolonged frying which requires a constant temperature. Copper was chosen for saucepans, a frying pan and sauté pan owing to its excellent heat conduction. Copper reacts instantly to changes in temperature, thus providing full control for the cook. Finally, aluminium was used for the foundation pieces in the Trio line: the pots and pans. This lightweight material conducts heat evenly and rapidly, and is easy to clean, making it ideal for everyday use.
Palsby also realised his vision for cookware with handles that remained cool enough to handle, even during intensive stovetop use. But equally, the handles should be sufficiently heat-safe for both oven and barbecue use. This requirement led him to choose stainless steel, for handles and lids too, as this metal is oven-safe, extremely durable and has low thermal conductivity.
Palsby’s appreciation of the role of the material in cookware became a crucial factor in bringing professional kitchen functionality to ordinary households. His innovative approach basically blazed a trail for how we prepare food in home kitchens.
Erik Mangor, 1977
This early commercial and information sheet for Eva Trio copper cookware highlighted the unique feature of solid sandwich material (copper, aluminium, stainless steel)
Ole Palsby, 1977
The advertisement shows an Eva Trio stainless steel pan, heated to red-hot to prove the claim about 'cool' handles.
Industrial and artisanal design
Palsby understood that the design of kitchenware should cater to the cooking and not the other way around. No ornate decorations or needless embellishments to steal the attention. Everything was to be carefully balanced with functionality in focus.
His approach led to sleek designs characterised by clean, honest lines and no-frills minimalism.
The Eva Trio line’s various elements, which originally comprised 18 pots and pans in either one or the other metal, gained their distinctive hallmarks from a number of consistent, streamlined, and distinctive common features: the cylindrical shapes of the bodies, the flat lids and riveted handles – which combined to give the cookware a sturdiness and timelessness.
To realise the concept of “stay-cool” handles, the rounded pot handles and elongated tubed handles were ingeniously riveted to the metal body so as to minimise the surface area in contact with the cook’s hands. This smart design ensured that hardly any heat was transferred from the pot or pan to the single or dual handles. Equally, the handles were stable to hold and also easy to hang up.
To introduce an extra dimension of usability, Palsby developed a flat plate-style lid, where the handle was not perched on top, but projected out over the side. That way, the lids were stackable for compact kitchen drawer storage. The flat design also made it possible to rest items on top of the lids like another pot to be kept hot, or a plate to be preheated. And with long shafts, the cook could lift the lid to peek at the cooking contents without risking scalds from rising steam.
These practical innovations were only half the story. Because the Trio range was so aesthetically appealing that it paved the way for cookware as serveware. The beautiful exterior made it acceptable to serve meals straight from the pot or pan brought to the table, which would have been unthinkable before.
Unique combinability
The final and crucial element that cemented the Trio line’s renown in Danish design history was Palsby’s vision of a holistic concept.
The original cookware was designed as a range of coordinated pieces that were combinable and stackable across types and materials. All the elements interacted harmoniously both functionally and aesthetically.
Palsby introduced pots and pans in three standardised diameters. This simple but ingenious concept made the individual items in the line stackable, minimising the storage space required in kitchen cabinets. Although it may seem obvious now, the stackability of the Eva Trio range broke new ground for cookware at that time.
The concept of standardised diameters enabled countless combinations of pots, lids and frying pans. This gave consumers the freedom to personalise their cookware to their cooking habits and preferences, while achieving a unified look in their kitchen.
As the crowning glory, the entire line was coordinated by the lids. Eva Trio is probably the only cookware in the world that is sold without accompanying lids. But there was a wise rationale for this unconventional feature: with standardised diameters, the four different pot lids in the cookware line can be used across the entire product range. And a lid from 1977 fits perfectly on a brand new pot from 2023. This continuity gives consumers the freedom to choose lids to cater for their individual needs and preferences, but also reduces the number of lids needed.
The Eva Trio cookware collection has received several awards for its innovative design and functionality since its launch in 1977
Eva Trio was arguably the first collection of kitchen equipment that was sufficiently stylish to leave out on display, thus paving the way for cookware to become an integral part of serveware
“Great kitchenware”
Despite the innovative design, Eva Trio was not an instant bestseller. The interest ran highest among chefs and women’s institutes – but that was set to change. A deciding factor for Eva Trio’s success was the compelling review written by George Kringelbach, culinary editor of the national newspaper Politiken.
Under the plain headline “Great Kitchenware”, Kringelbach wrote:
“Given how much junk and how many ridiculous items are offered for sale as “professional kitchenware”, it almost brings tears to the eyes to finally behold the real deal; a new line of kitchenware based on superlative quality – and superlative logic”.
To round off his glowing review, Kringelbach promised:
“All my pots and pans will be scrapped as soon as I can get hold of their superior equivalents in the “Trio” line. It’s as simple as that”.
Today, Eva Trio is a comprehensive concept covering all aspects of preparing, plating and serving food and refreshments. Ole Palsby’s holistic approach lives on in kitchen tools, kitchenware and dishware with the same combinability across lines and materials: the pot lid fits on the pasta bowl, and the colander fits on the plate, so you need fewer pieces to be able to do more.
Or as Palsby himself put it:
“The concept evolved slowly, branching out like a well-rooted tree. This now has an inner strength because of its unique combinabiity, which makes it inimitable in whole or in part. It’s all one holistic summation”.
Eva Trio is part of the Danish company Eva Solo A/S, which has supplied innovation and exclusive design within home accessories and kitchenware since 1913.
You might also like
Error executing template "Designs/Swift/Paragraph/Swift_ArticleList_Custom.cshtml" System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object. at Dynamicweb.Content.Items.Queries.Repository.IsPageAllowed(Page page) at Dynamicweb.Content.Items.Queries.Repository.GetPagesByIds(IEnumerable`1 parentIds, Boolean includeChildItems, Boolean checkPermissions, List`1& childPages) at Dynamicweb.Content.Items.Queries.Repository.SelectByParentPageIds(IEnumerable`1 parentIds, Query query, Boolean includeParagraphs, Boolean includeChildItems, Boolean checkPermissions, Boolean includeInheritedItems) at Dynamicweb.ItemPublisher.Frontend.GetItems() at Dynamicweb.ItemPublisher.Frontend.List() at Dynamicweb.ItemPublisher.Frontend.GetContent() at Dynamicweb.ItemPublisher.Frontend.GetContentBySettings(String settings) --- End of inner exception stack trace --- at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Dynamicweb.Extensibility.AddIns.AddInManager.InvokeFunction(Object instance, String functionName, Object[] arguments) at Dynamicweb.Rendering.TemplateBase`1.RenderItemList(Object settings) at CompiledRazorTemplates.Dynamic.RazorEngine_5412cf768ef742a4b36a2fe04707b110.<>c__DisplayClass0_0.<RenderArticleList>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\twodayco3\evasolo.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList_Custom.cshtml:line 128 at CompiledRazorTemplates.Dynamic.RazorEngine_5412cf768ef742a4b36a2fe04707b110.Execute() in D:\dynamicweb.net\Solutions\twodayco3\evasolo.cloud.dynamicweb-cms.com\Files\Templates\Designs\Swift\Paragraph\Swift_ArticleList_Custom.cshtml:line 67 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 System.Web 3 @using Dynamicweb 4 @using Dynamicweb.Core 5 @using Dynamicweb.Frontend 6 @using Dynamicweb.Environment 7 8 @* TODO: REFACTURE/UPGRADE TO SWIFT (v1.25.0) *@ 9 10 @{ 11 var relationType = Model.Item.GetRawValueString("RelationType", "article"); 12 string listSource = !string.IsNullOrEmpty(Model.Item.GetString("ListSource")) ? Model.Item.GetString("ListSource") : Model.PageID.ToString(); // STANDARD ARTICLES 13 var listBehaviour = Model.Item.GetRawValueString("ListBehaviour", "articles"); // STANDARD ARTICLES 14 string articleListSortOrder = !string.IsNullOrEmpty(Model.Item.GetString("ArticleListSortOrder")) ? Model.Item.GetString("ArticleListSortOrder") : "Descending"; 15 int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; 16 string articleListLayout = !string.IsNullOrEmpty(Model.Item.GetString("ArticleListLayout")) ? Model.Item.GetString("ArticleListLayout") : "grid"; 17 string columnTheme = !string.IsNullOrEmpty(Model.Item.GetString("ColumnTheme")) ? Model.Item.GetString("ColumnTheme") : string.Empty; 18 string columnThemeClass = columnTheme != string.Empty ? " theme " + columnTheme + " p-3" + (articleListLayout == "carousel" ? " px-lg-4" : string.Empty) : string.Empty; 19 20 <div class="h-100@(columnThemeClass) item_@Model.Item.SystemName.ToLower()"> 21 @switch (articleListLayout) 22 { 23 case "grid": 24 if (relationType == "article") 25 { 26 if (listBehaviour == "articles") 27 {@RenderArticleList("Swift_Article", listSource, maxItemsInList, articleListSortOrder) } 28 if (listBehaviour == "lists") 29 { @RenderArticleList("Swift_ArticleListPage", listSource, maxItemsInList, articleListSortOrder) } 30 } 31 else if (relationType == "clerk") 32 { 33 @RenderArticleListClerk("Swift_Article", maxItemsInList, articleListSortOrder) 34 } 35 break; 36 37 case "carousel": 38 var carouselSettings = Model.Item.GetRawValueString("CarouselSettings", "4"); 39 string slidesPerPage = $"slider-item-show{carouselSettings}"; 40 string navigationStyle = $"{Model.Item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; 41 string navigationPlacement = $"{Model.Item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; 42 string indicatorStyle = $"{Model.Item.GetRawValueString("IndicatorStyle", string.Empty)}"; 43 string revealSlides = Model.Item.GetRawValueString("RevealSlides", "reveal") == "reveal" ? "slider-item-reveal" : string.Empty; 44 string sliderItemsGap = Model.Item.GetRawValueString("SliderItemsGap", "slider-item-gap") == "slider-item-nogap" ? "slider-item-nogap" : string.Empty; 45 string navigationAlwaysVisible = (Model.Item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; 46 string navigationVisibleOnTouch = (Model.Item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; 47 string navigationShowScrollbar = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; 48 string scrollBarForceMobile = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "--swiffy-slider-track-height:0.5rem !important;" : string.Empty; 49 string navigationSmall = (Model.Item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; 50 string navigationInvertColors = (Model.Item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; 51 string navigationSlideEntirePage = (Model.Item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; 52 string navigationNoLoop = (Model.Item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; 53 string indicatorsOutsideSlider = (Model.Item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; 54 string indicatorsHighlightActive = (Model.Item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; 55 string indicatorsInvertColors = (Model.Item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; 56 string indicatorsVisibleOnSmallDevices = (Model.Item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; 57 string animation = Model.Item.GetRawValueString("Animation", string.Empty) != string.Empty ? $"slider-nav-animation {Model.Item.GetRawValueString("Animation")}" : string.Empty; 58 string autoplay = (Model.Item.GetBoolean("Autoplay")) ? "slider-nav-autoplay" : string.Empty; 59 string autoplayInterval = Model.Item.GetRawValueString("AutoplayInterval", string.Empty); 60 bool hideSliderNavigation = (navigationStyle == "slider-nav-none"); 61 62 <div id="Slider_@Model.ID" class="swiffy-slider @(slidesPerPage) @(navigationStyle) @(revealSlides) @(navigationPlacement) @(navigationAlwaysVisible) @(navigationVisibleOnTouch) @(sliderItemsGap) @(indicatorStyle) @(navigationShowScrollbar) @(navigationSmall) @(navigationInvertColors) @(indicatorsOutsideSlider) @(navigationNoLoop) @(indicatorsHighlightActive) @(indicatorsInvertColors) @(indicatorsVisibleOnSmallDevices) @(navigationSlideEntirePage) @(animation) @(autoplay) item_@Model.Item.SystemName.ToLower()" style="--swiffy-slider-nav-light:var(--swift-foreground-color);--swiffy-slider-nav-dark:var(--swift-background-color);visibility:hidden;opacity:0;@(scrollBarForceMobile)" data-slider-nav-autoplay-interval="@(autoplayInterval)"> 63 <div class="slider-container pb-3 py-lg-3 mt-lg-n3"> 64 @if (relationType == "article") 65 { 66 if (listBehaviour == "articles") 67 {@RenderArticleList("Swift_Article", listSource, maxItemsInList, articleListSortOrder) } 68 if (listBehaviour == "lists") 69 { @RenderArticleList("Swift_ArticleListPage", listSource, maxItemsInList, articleListSortOrder) } 70 } 71 else if (relationType == "clerk") 72 { 73 @RenderArticleListClerk("Swift_Article", maxItemsInList, articleListSortOrder) 74 } 75 </div> 76 77 @if (!hideSliderNavigation) 78 { 79 <button type="button" title="@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlAttributeEncode(Translate("Previous slide"))" class="slider-nav" style="z-index:1;"> 80 <span class="visually-hidden">@Translate("Previous slide")</span> 81 </button> 82 <button type="button" title="@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlAttributeEncode(Translate("Next slide"))" class="slider-nav slider-nav-next" style="z-index:1;"> 83 <span class="visually-hidden">@Translate("Next slide")</span> 84 </button> 85 } 86 @if (indicatorStyle != "slider-indicators-hidden") 87 { 88 string isActive = "active"; 89 int slideCount = 1; 90 91 <div class="slider-indicators" style="z-index:1;"> 92 @for (int i = 0; i < maxItemsInList; i++) 93 { 94 <button class="@isActive" type="button" title='@Dynamicweb.Core.Encoders.HtmlEncoder.HtmlAttributeEncode(Translate("Go to slide")) @slideCount'> 95 <span class="visually-hidden">@Translate("Go to slide") @slideCount</span> 96 </button> 97 98 slideCount++; 99 isActive = null; 100 } 101 </div> 102 } 103 104 <script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> 105 <script type="module"> 106 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 107 document.addEventListener('load.swift.assetloader', () => { 108 swiffyslider.initSlider(document.querySelector('#Slider_@Model.ID')); 109 document.querySelector('#Slider_@Model.ID').style.opacity = 1; 110 document.querySelector('#Slider_@Model.ID').style.visibility = "visible"; 111 }); 112 </script> 113 </div> 114 115 break; 116 } 117 </div> 118 } 119 120 @helper RenderArticleList(string itemType, string listSource, int maxItemsInList, string articleListSortOrder) 121 { 122 var parent = Dynamicweb.Context.Current.Request.QueryString.Get("list"); 123 var query = string.IsNullOrEmpty(parent) ? listSource : parent; 124 var includeAllChildren = Model.Item.GetRawValueString("ListDepth", "all") == "all" ? true : false; // STANDARD ARTICLES 125 var listContext = Model.Item?.GetRawValueString("ListContext", string.Empty).Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); // STANDARD ARTICLES 126 var filterString = string.Join(" or ", listContext.Select(item => $"Tags == \"{item}\" or Tags ends with \",{item}\" or Tags starts with \"{item},\" or Tags contains \",{item},\"")); 127 128 @RenderItemList(new 129 { 130 ItemType = itemType, 131 ListTemplate = "ItemPublisher/List/List_Custom.cshtml", 132 ItemFieldsList = "*", 133 ListSourceType = "Page", 134 ListSourcePage = query, 135 ListPageSize = maxItemsInList, 136 IncludeParagraphItems = true, 137 ListOrderBy = "PublishedDate", 138 ListSecondOrderBy = "Updated", 139 ListOrderByDirection = articleListSortOrder, 140 IncludeAllChildItems = includeAllChildren, 141 Filter = itemType == "Swift_Article" ? filterString : null // Filter only if "articles only" 142 }) 143 } 144 145 @helper RenderArticleListClerk(string itemType, int maxItemsInList, string articleListSortOrder) 146 { 147 // Doc.: https://docs.clerk.io/reference/recommendationspagesubstituting 148 // - recommendations/page/substituting - Pages that are similar to any given page 149 // - recommendations/page/product - Pages that are related to any given product - NOTE: ProductID param is required 150 // - recommendations/page/category - Pages that are related to any given category - NOTE: GroupID param is required 151 152 var isProductDetail = (Pageview.Page.NavigationTag.ToLower() == "shop" && Dynamicweb.Context.Current.Request.HasRequest("ProductID")); 153 var renderClerk = (!isProductDetail || GetPageIdByNavigationTag("ProductDetailPage") == PageView.Current().CurrentParagraph.Page.ID); 154 155 var clerkEndPoint = Model.Item.GetString("ClerkEndpoint"); 156 var clerkQuery = new List<string>(); 157 158 switch (clerkEndPoint) 159 { 160 case "recommendations/page/substituting": 161 clerkQuery.Add("page=" + Model.PageID); 162 break; 163 164 case "recommendations/page/product": 165 if (Context.Current.Request.HasRequest("ProductID")) 166 { 167 clerkQuery.Add("product=" + Context.Current.Request.GetString("ProductID")); 168 } 169 else 170 { 171 renderClerk = false; 172 } 173 break; 174 175 case "recommendations/page/category": 176 if (Context.Current.Request.HasRequest("GroupID")) 177 { 178 clerkQuery.Add("category=" + Context.Current.Request.GetString("GroupID")); 179 } 180 else 181 { 182 renderClerk = false; 183 } 184 break; 185 } 186 187 if (renderClerk) 188 { 189 var response = Smartpage.EvaSolo.Clerk.Services.ClerkApi.Request(clerkEndPoint, string.Join("&", clerkQuery), null, Model.Item.GetString("ClerkLabels"), maxItemsInList); 190 if (response != null && response.Any()) 191 { 192 var itemEntries = Dynamicweb.Content.Services.Pages.GetPages(response.Select(i => Convert.ToInt32(i)).ToArray()).Where(i => i != null).Select(i => i.ItemId).ToArray(); 193 if (itemEntries.Any()) 194 { 195 Dynamicweb.Context.Current.Items["Custom_ClerkSortOrder"] = itemEntries; // NOTE: Ordered by ItemId. Used to sort in List_Custom.cshtml 196 197 @RenderItemList(new 198 { 199 ItemType = itemType, 200 ListTemplate = "ItemPublisher/List/List_Custom.cshtml", 201 ItemFieldsList = "*", 202 ListSourceType = "ItemEntries", 203 ListPageSize = itemEntries.Count(), 204 SourceItemEntries = string.Join(",", itemEntries), 205 IncludeParagraphItems = true, 206 ListOrderByDirection = articleListSortOrder 207 }) 208 } 209 } 210 } 211 else if (Pageview.IsVisualEditorMode) 212 { 213 switch (clerkEndPoint) 214 { 215 case "recommendations/page/product": 216 <div class="alert alert-dark m-0" role="alert"> 217 <span>@Translate("Articlelist: The articlelist will be shown here, if a product is used")</span> 218 </div> 219 break; 220 221 case "recommendations/page/category": 222 <div class="alert alert-dark m-0" role="alert"> 223 <span>@Translate("Articlelist: The articlelist will be shown here, if a product group is used")</span> 224 </div> 225 break; 226 } 227 } 228 } 229