From 3a7091467b19e468fe59346c1dcfd725e3e3888e Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 8 Dec 2015 01:15:41 +0100 Subject: [PATCH] Fixed duplicate field shape issue with Content Field elements. Fixes #5974 --- .../Services/ContentFieldDisplay.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Layouts/Services/ContentFieldDisplay.cs b/src/Orchard.Web/Modules/Orchard.Layouts/Services/ContentFieldDisplay.cs index b1bb4212c..a360722ac 100644 --- a/src/Orchard.Web/Modules/Orchard.Layouts/Services/ContentFieldDisplay.cs +++ b/src/Orchard.Web/Modules/Orchard.Layouts/Services/ContentFieldDisplay.cs @@ -33,7 +33,7 @@ namespace Orchard.Layouts.Services { var drivers = GetFieldDrivers(field.FieldDefinition.Name); drivers.Invoke(driver => { - var result = driver.BuildDisplayShape(context); + var result = Filter(driver.BuildDisplayShape(context), field); if (result != null) result.Apply(context); }, Logger); @@ -67,6 +67,21 @@ namespace Orchard.Layouts.Services { return context.Shape; } + private DriverResult Filter(DriverResult driverResult, ContentField field) { + DriverResult result = null; + var combinedResult = driverResult as CombinedResult; + var contentShapeResult = driverResult as ContentShapeResult; + + if (combinedResult != null) { + result = combinedResult.GetResults().SingleOrDefault(x => x.ContentField != null && x.ContentField.Name == field.Name); + } + else if (contentShapeResult != null) { + result = contentShapeResult.ContentField != null && contentShapeResult.ContentField.Name == field.Name ? contentShapeResult : driverResult; + } + + return result; + } + private IEnumerable GetFieldDrivers(string fieldName) { return _contentFieldDrivers.Where(x => x.GetType().BaseType.GenericTypeArguments[0].Name == fieldName); }