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); }