mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-07-16 04:42:53 +08:00
Adding LayoutPart summary shape.
This commit is contained in:
parent
a91d06a4b9
commit
fbac586231
@ -1,6 +1,7 @@
|
|||||||
using Orchard.Layouts.Elements;
|
using Orchard.Layouts.Elements;
|
||||||
using Orchard.Layouts.Framework.Drivers;
|
using Orchard.Layouts.Framework.Drivers;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Services;
|
||||||
using Orchard.Layouts.ViewModels;
|
using Orchard.Layouts.ViewModels;
|
||||||
|
|
||||||
namespace Orchard.Layouts.Drivers {
|
namespace Orchard.Layouts.Drivers {
|
||||||
@ -25,5 +26,9 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
.Add("body", element.Content).RemoveTags().Analyze()
|
.Add("body", element.Content).RemoveTags().Analyze()
|
||||||
.Add("format", "html").Store();
|
.Add("format", "html").Store();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnBuildDocument(Html element, BuildElementDocumentContext context) {
|
||||||
|
context.HtmlContent = element.Content;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ using Orchard.ContentManagement.Handlers;
|
|||||||
using Orchard.Layouts.Framework.Display;
|
using Orchard.Layouts.Framework.Display;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
using Orchard.Layouts.Framework.Serialization;
|
using Orchard.Layouts.Framework.Serialization;
|
||||||
|
using Orchard.Layouts.Helpers;
|
||||||
using Orchard.Layouts.Models;
|
using Orchard.Layouts.Models;
|
||||||
using Orchard.Layouts.Services;
|
using Orchard.Layouts.Services;
|
||||||
using Orchard.Layouts.ViewModels;
|
using Orchard.Layouts.ViewModels;
|
||||||
@ -15,20 +16,31 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
private readonly ILayoutSerializer _serializer;
|
private readonly ILayoutSerializer _serializer;
|
||||||
private readonly IElementDisplay _elementDisplay;
|
private readonly IElementDisplay _elementDisplay;
|
||||||
private readonly IElementManager _elementManager;
|
private readonly IElementManager _elementManager;
|
||||||
|
private readonly ILayoutManager _layoutManager;
|
||||||
|
|
||||||
|
public LayoutPartDriver(
|
||||||
|
ILayoutSerializer serializer,
|
||||||
|
IElementDisplay elementDisplay,
|
||||||
|
IElementManager elementManager,
|
||||||
|
ILayoutManager layoutManager) {
|
||||||
|
|
||||||
public LayoutPartDriver(ILayoutSerializer serializer, IElementDisplay elementDisplay, IElementManager elementManager) {
|
|
||||||
_serializer = serializer;
|
_serializer = serializer;
|
||||||
_elementDisplay = elementDisplay;
|
_elementDisplay = elementDisplay;
|
||||||
_elementManager = elementManager;
|
_elementManager = elementManager;
|
||||||
|
_layoutManager = layoutManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Display(LayoutPart part, string displayType, dynamic shapeHelper) {
|
protected override DriverResult Display(LayoutPart part, string displayType, dynamic shapeHelper) {
|
||||||
return ContentShape("Parts_Layout", () => {
|
return Combined(
|
||||||
var describeContext = new DescribeElementsContext { Content = part };
|
ContentShape("Parts_Layout", () => {
|
||||||
var instances = _serializer.Deserialize(part.LayoutState, describeContext);
|
var elements = _layoutManager.LoadElements(part);
|
||||||
var layoutRoot = _elementDisplay.DisplayElements(instances, part, displayType: displayType);
|
var layoutRoot = _elementDisplay.DisplayElements(elements, part, displayType: displayType);
|
||||||
return shapeHelper.Parts_Layout(LayoutRoot: layoutRoot);
|
return shapeHelper.Parts_Layout(LayoutRoot: layoutRoot);
|
||||||
});
|
}),
|
||||||
|
ContentShape("Parts_Layout_Summary", () => {
|
||||||
|
var document = _layoutManager.BuildDocument(part);
|
||||||
|
return shapeHelper.Parts_Layout_Summary(Document: document);
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override DriverResult Editor(LayoutPart part, dynamic shapeHelper) {
|
protected override DriverResult Editor(LayoutPart part, dynamic shapeHelper) {
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Orchard.Layouts.Framework.Display;
|
using Orchard.Layouts.Framework.Display;
|
||||||
using Orchard.Layouts.Framework.Drivers;
|
using Orchard.Layouts.Framework.Drivers;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Services;
|
||||||
using Orchard.Layouts.ViewModels;
|
using Orchard.Layouts.ViewModels;
|
||||||
using MarkdownElement = Orchard.Layouts.Elements.Markdown;
|
using MarkdownElement = Orchard.Layouts.Elements.Markdown;
|
||||||
|
|
||||||
@ -24,7 +25,7 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnDisplaying(MarkdownElement element, ElementDisplayContext context) {
|
protected override void OnDisplaying(MarkdownElement element, ElementDisplayContext context) {
|
||||||
context.ElementShape.ProcessedContent = new MarkdownSharp.Markdown().Transform(element.Content);
|
context.ElementShape.ProcessedContent = ToHtml(element.Content);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnIndexing(MarkdownElement element, ElementIndexingContext context) {
|
protected override void OnIndexing(MarkdownElement element, ElementIndexingContext context) {
|
||||||
@ -32,5 +33,13 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
.Add("body", element.Content).RemoveTags().Analyze()
|
.Add("body", element.Content).RemoveTags().Analyze()
|
||||||
.Add("format", "markdown").Store();
|
.Add("format", "markdown").Store();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnBuildDocument(MarkdownElement element, BuildElementDocumentContext context) {
|
||||||
|
context.HtmlContent = ToHtml(element.Content);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ToHtml(string markdown) {
|
||||||
|
return new MarkdownSharp.Markdown().Transform(markdown);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
using Orchard.Layouts.Elements;
|
using Orchard.Layouts.Elements;
|
||||||
using Orchard.Layouts.Framework.Drivers;
|
using Orchard.Layouts.Framework.Drivers;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Services;
|
||||||
using Orchard.Layouts.ViewModels;
|
using Orchard.Layouts.ViewModels;
|
||||||
|
|
||||||
namespace Orchard.Layouts.Drivers {
|
namespace Orchard.Layouts.Drivers {
|
||||||
@ -25,5 +26,9 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
.Add("body", element.Content).RemoveTags().Analyze()
|
.Add("body", element.Content).RemoveTags().Analyze()
|
||||||
.Add("format", "text").Store();
|
.Add("format", "text").Store();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnBuildDocument(Paragraph element, BuildElementDocumentContext context) {
|
||||||
|
context.HtmlContent = element.Content;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ using Orchard.Layouts.Framework.Display;
|
|||||||
using Orchard.Layouts.Framework.Drivers;
|
using Orchard.Layouts.Framework.Drivers;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
using Orchard.Layouts.Models;
|
using Orchard.Layouts.Models;
|
||||||
|
using Orchard.Layouts.Services;
|
||||||
using Orchard.Layouts.Settings;
|
using Orchard.Layouts.Settings;
|
||||||
using Orchard.Layouts.ViewModels;
|
using Orchard.Layouts.ViewModels;
|
||||||
using Orchard.Services;
|
using Orchard.Services;
|
||||||
@ -40,7 +41,7 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
var text = element.Content;
|
var text = element.Content;
|
||||||
var layoutPart = context.Content.As<LayoutPart>();
|
var layoutPart = context.Content.As<LayoutPart>();
|
||||||
var flavor = GetFlavor(layoutPart);
|
var flavor = GetFlavor(layoutPart);
|
||||||
var processedText = _htmlFilters.Aggregate(text, (t, filter) => filter.ProcessContent(t, flavor));
|
var processedText = ToHtml(text, flavor);
|
||||||
|
|
||||||
context.ElementShape.ProcessedText = processedText;
|
context.ElementShape.ProcessedText = processedText;
|
||||||
}
|
}
|
||||||
@ -54,6 +55,17 @@ namespace Orchard.Layouts.Drivers {
|
|||||||
.Add("format", flavor).Store();
|
.Add("format", flavor).Store();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnBuildDocument(Text element, BuildElementDocumentContext context) {
|
||||||
|
var layoutPart = context.Layout.As<LayoutPart>();
|
||||||
|
var flavor = GetFlavor(layoutPart);
|
||||||
|
|
||||||
|
context.HtmlContent = ToHtml(element.Content, flavor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ToHtml(string content, string flavor) {
|
||||||
|
return _htmlFilters.Aggregate(content, (t, filter) => filter.ProcessContent(t, flavor));
|
||||||
|
}
|
||||||
|
|
||||||
private static string GetFlavor(LayoutPart part) {
|
private static string GetFlavor(LayoutPart part) {
|
||||||
return part != null ? part.GetFlavor() : LayoutPartSettings.FlavorDefaultDefault; // TODO: make this configurable.
|
return part != null ? part.GetFlavor() : LayoutPartSettings.FlavorDefaultDefault; // TODO: make this configurable.
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Orchard.Layouts.Framework.Display;
|
using Orchard.Layouts.Framework.Display;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Services;
|
||||||
|
|
||||||
namespace Orchard.Layouts.Framework.Drivers {
|
namespace Orchard.Layouts.Framework.Drivers {
|
||||||
public abstract class ElementDriver<TElement> : Component, IElementDriver where TElement: IElement {
|
public abstract class ElementDriver<TElement> : Component, IElementDriver where TElement: IElement {
|
||||||
@ -33,6 +34,10 @@ namespace Orchard.Layouts.Framework.Drivers {
|
|||||||
OnIndexing((TElement)context.Element, context);
|
OnIndexing((TElement)context.Element, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void BuildDocument(BuildElementDocumentContext context) {
|
||||||
|
OnBuildDocument((TElement)context.Element, context);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual EditorResult OnBuildEditor(TElement element, ElementEditorContext context) {
|
protected virtual EditorResult OnBuildEditor(TElement element, ElementEditorContext context) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -53,6 +58,9 @@ namespace Orchard.Layouts.Framework.Drivers {
|
|||||||
protected virtual void OnIndexing(TElement element, ElementIndexingContext context) {
|
protected virtual void OnIndexing(TElement element, ElementIndexingContext context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnBuildDocument(TElement element, BuildElementDocumentContext context) {
|
||||||
|
}
|
||||||
|
|
||||||
protected EditorResult Editor(ElementEditorContext context, params dynamic[] editorShapes) {
|
protected EditorResult Editor(ElementEditorContext context, params dynamic[] editorShapes) {
|
||||||
foreach (var editorShape in editorShapes) {
|
foreach (var editorShape in editorShapes) {
|
||||||
if (String.IsNullOrWhiteSpace(editorShape.Metadata.Position)) {
|
if (String.IsNullOrWhiteSpace(editorShape.Metadata.Position)) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Orchard.Layouts.Framework.Display;
|
using Orchard.Layouts.Framework.Display;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Services;
|
||||||
|
|
||||||
namespace Orchard.Layouts.Framework.Drivers {
|
namespace Orchard.Layouts.Framework.Drivers {
|
||||||
public interface IElementDriver : IDependency {
|
public interface IElementDriver : IDependency {
|
||||||
@ -10,5 +11,6 @@ namespace Orchard.Layouts.Framework.Drivers {
|
|||||||
void LayoutSaving(ElementSavingContext context);
|
void LayoutSaving(ElementSavingContext context);
|
||||||
void Removing(ElementRemovingContext context);
|
void Removing(ElementRemovingContext context);
|
||||||
void Indexing(ElementIndexingContext context);
|
void Indexing(ElementIndexingContext context);
|
||||||
|
void BuildDocument(BuildElementDocumentContext context);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -231,13 +231,16 @@
|
|||||||
<Compile Include="Helpers\EditorResultExtensions.cs" />
|
<Compile Include="Helpers\EditorResultExtensions.cs" />
|
||||||
<Compile Include="Helpers\PrefixHelper.cs" />
|
<Compile Include="Helpers\PrefixHelper.cs" />
|
||||||
<Compile Include="Providers\BlueprintElementHarvester.cs" />
|
<Compile Include="Providers\BlueprintElementHarvester.cs" />
|
||||||
|
<Compile Include="Services\BuildElementDocumentContext.cs" />
|
||||||
<Compile Include="Services\CurrentControllerAccessor.cs" />
|
<Compile Include="Services\CurrentControllerAccessor.cs" />
|
||||||
<Compile Include="Services\ElementCreatedContext.cs" />
|
<Compile Include="Services\ElementCreatedContext.cs" />
|
||||||
<Compile Include="Services\ElementCreatingContext.cs" />
|
<Compile Include="Services\ElementCreatingContext.cs" />
|
||||||
|
<Compile Include="Services\ElementDocument.cs" />
|
||||||
<Compile Include="Services\ElementEventContext.cs" />
|
<Compile Include="Services\ElementEventContext.cs" />
|
||||||
<Compile Include="Services\ElementEventHandlerBase.cs" />
|
<Compile Include="Services\ElementEventHandlerBase.cs" />
|
||||||
<Compile Include="Services\ICurrentControllerAccessor.cs" />
|
<Compile Include="Services\ICurrentControllerAccessor.cs" />
|
||||||
<Compile Include="Services\IElementEventHandler.cs" />
|
<Compile Include="Services\IElementEventHandler.cs" />
|
||||||
|
<Compile Include="Services\LayoutDocument.cs" />
|
||||||
<Compile Include="Signals.cs" />
|
<Compile Include="Signals.cs" />
|
||||||
<Compile Include="ViewModels\ElementBlueprintPropertiesViewModel.cs" />
|
<Compile Include="ViewModels\ElementBlueprintPropertiesViewModel.cs" />
|
||||||
<Compile Include="ViewModels\CreateElementBlueprintViewModel.cs" />
|
<Compile Include="ViewModels\CreateElementBlueprintViewModel.cs" />
|
||||||
@ -379,6 +382,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Views\Element-Media-VectorImage.Design.cshtml" />
|
<Content Include="Views\Element-Media-VectorImage.Design.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Views\Parts.Layout.Summary.cshtml" />
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
<Place Parts_ElementWrapper="Content:3" />
|
<Place Parts_ElementWrapper="Content:3" />
|
||||||
</Match>
|
</Match>
|
||||||
|
|
||||||
|
<Match DisplayType="Summary">
|
||||||
|
<Place Parts_Layout_Summary="Content:5"/>
|
||||||
|
</Match>
|
||||||
|
|
||||||
<Match DisplayType="Layout">
|
<Match DisplayType="Layout">
|
||||||
<Place Parts_Common_Body="Content:0"
|
<Place Parts_Common_Body="Content:0"
|
||||||
Parts_Common_Body_Summary="-"
|
Parts_Common_Body_Summary="-"
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Models;
|
||||||
|
|
||||||
|
namespace Orchard.Layouts.Services {
|
||||||
|
public class BuildElementDocumentContext {
|
||||||
|
public IElement Element { get; set; }
|
||||||
|
public string HtmlContent { get; set; }
|
||||||
|
public ILayoutAspect Layout { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
|
||||||
|
namespace Orchard.Layouts.Services {
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a layout document node.
|
||||||
|
/// </summary>
|
||||||
|
public class ElementDocument {
|
||||||
|
public IElement Element { get; set; }
|
||||||
|
public string Content { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ using Orchard.Layouts.Framework.Drivers;
|
|||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
using Orchard.Layouts.Framework.Harvesters;
|
using Orchard.Layouts.Framework.Harvesters;
|
||||||
using Orchard.Layouts.Helpers;
|
using Orchard.Layouts.Helpers;
|
||||||
|
using Orchard.Layouts.Models;
|
||||||
|
|
||||||
namespace Orchard.Layouts.Services {
|
namespace Orchard.Layouts.Services {
|
||||||
public class ElementManager : Component, IElementManager {
|
public class ElementManager : Component, IElementManager {
|
||||||
@ -21,9 +22,9 @@ namespace Orchard.Layouts.Services {
|
|||||||
Lazy<IEnumerable<IElementHarvester>> elementHarvesters,
|
Lazy<IEnumerable<IElementHarvester>> elementHarvesters,
|
||||||
ICacheManager cacheManager,
|
ICacheManager cacheManager,
|
||||||
Lazy<IEnumerable<IElementDriver>> drivers,
|
Lazy<IEnumerable<IElementDriver>> drivers,
|
||||||
Lazy<IEnumerable<ICategoryProvider>> categoryProviders,
|
Lazy<IEnumerable<ICategoryProvider>> categoryProviders,
|
||||||
IElementFactory factory,
|
IElementFactory factory,
|
||||||
ISignals signals,
|
ISignals signals,
|
||||||
IElementEventHandler elementEventHandler) {
|
IElementEventHandler elementEventHandler) {
|
||||||
|
|
||||||
_elementHarvesters = elementHarvesters;
|
_elementHarvesters = elementHarvesters;
|
||||||
@ -151,12 +152,32 @@ namespace Orchard.Layouts.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Indexing(LayoutIndexingContext context) {
|
public void Indexing(LayoutIndexingContext context) {
|
||||||
var elementInstances = context.Elements.Flatten();
|
var elementInstances = context.Elements.Flatten();
|
||||||
InvokeDriver(elementInstances, (driver, elementInstance) => driver.Indexing(new ElementIndexingContext(context) {
|
InvokeDriver(elementInstances, (driver, elementInstance) => driver.Indexing(new ElementIndexingContext(context) {
|
||||||
Element = elementInstance
|
Element = elementInstance
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LayoutDocument BuildDocument(ILayoutAspect layout, IEnumerable<IElement> elements) {
|
||||||
|
var document = new LayoutDocument();
|
||||||
|
|
||||||
|
InvokeDriver(elements, (driver, element) => {
|
||||||
|
var context = new BuildElementDocumentContext {
|
||||||
|
Layout = layout,
|
||||||
|
Element = element
|
||||||
|
};
|
||||||
|
driver.BuildDocument(context);
|
||||||
|
|
||||||
|
if (!String.IsNullOrWhiteSpace(context.HtmlContent))
|
||||||
|
document.Elements.Add(new ElementDocument {
|
||||||
|
Element = element,
|
||||||
|
Content = context.HtmlContent
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return document;
|
||||||
|
}
|
||||||
|
|
||||||
private IDictionary<string, Category> GetCategories() {
|
private IDictionary<string, Category> GetCategories() {
|
||||||
var providers = _categoryProviders.Value;
|
var providers = _categoryProviders.Value;
|
||||||
var categories = providers.SelectMany(x => x.GetCategories());
|
var categories = providers.SelectMany(x => x.GetCategories());
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Orchard.Layouts.Framework.Drivers;
|
using Orchard.Layouts.Framework.Drivers;
|
||||||
using Orchard.Layouts.Framework.Elements;
|
using Orchard.Layouts.Framework.Elements;
|
||||||
|
using Orchard.Layouts.Models;
|
||||||
|
|
||||||
namespace Orchard.Layouts.Services {
|
namespace Orchard.Layouts.Services {
|
||||||
public interface IElementManager : IDependency {
|
public interface IElementManager : IDependency {
|
||||||
@ -23,5 +24,6 @@ namespace Orchard.Layouts.Services {
|
|||||||
void Saving(LayoutSavingContext context);
|
void Saving(LayoutSavingContext context);
|
||||||
void Removing(LayoutSavingContext context);
|
void Removing(LayoutSavingContext context);
|
||||||
void Indexing(LayoutIndexingContext context);
|
void Indexing(LayoutIndexingContext context);
|
||||||
|
LayoutDocument BuildDocument(ILayoutAspect layout, IEnumerable<IElement> elements);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ namespace Orchard.Layouts.Services {
|
|||||||
IEnumerable<LayoutPart> GetTemplates();
|
IEnumerable<LayoutPart> GetTemplates();
|
||||||
LayoutPart GetLayout(int id);
|
LayoutPart GetLayout(int id);
|
||||||
IEnumerable<IElement> LoadElements(ILayoutAspect layout);
|
IEnumerable<IElement> LoadElements(ILayoutAspect layout);
|
||||||
|
LayoutDocument BuildDocument(ILayoutAspect layout);
|
||||||
dynamic RenderLayout(ILayoutAspect layout, string state = null, string displayType = null);
|
dynamic RenderLayout(ILayoutAspect layout, string state = null, string displayType = null);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Orchard.Layouts.Services {
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a text document of a layout.
|
||||||
|
/// </summary>
|
||||||
|
public class LayoutDocument {
|
||||||
|
public LayoutDocument() {
|
||||||
|
Elements = new List<ElementDocument>();
|
||||||
|
}
|
||||||
|
public IList<ElementDocument> Elements { get; set; }
|
||||||
|
|
||||||
|
public string ToString(string separator) {
|
||||||
|
return String.Join(separator, Elements.Select(x => x.Content));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -44,6 +44,11 @@ namespace Orchard.Layouts.Services {
|
|||||||
return _serializer.Deserialize(layout.LayoutState, describeContext);
|
return _serializer.Deserialize(layout.LayoutState, describeContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LayoutDocument BuildDocument(ILayoutAspect layout) {
|
||||||
|
var elements = LoadElements(layout).Flatten().ToArray();
|
||||||
|
return _elementManager.BuildDocument(layout, elements);
|
||||||
|
}
|
||||||
|
|
||||||
public dynamic RenderLayout(ILayoutAspect layout, string state = null, string displayType = null) {
|
public dynamic RenderLayout(ILayoutAspect layout, string state = null, string displayType = null) {
|
||||||
var elements = _serializer.Deserialize(state ?? layout.LayoutState, new DescribeElementsContext { Content = layout });
|
var elements = _serializer.Deserialize(state ?? layout.LayoutState, new DescribeElementsContext { Content = layout });
|
||||||
var layoutRoot = _elementDisplay.DisplayElements(elements, layout, displayType);
|
var layoutRoot = _elementDisplay.DisplayElements(elements, layout, displayType);
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
@*doing excerpt generation on the way out for now so we don't stick ourselves with needing to regen excerpts for existing data
|
||||||
|
also, doing this here, inline, until we have a pluggable processing model (both in and out)
|
||||||
|
also, ...this is ugly *@
|
||||||
|
@using Orchard.ContentManagement
|
||||||
|
@using Orchard.Layouts.Services
|
||||||
|
@using Orchard.Utility.Extensions
|
||||||
|
@{
|
||||||
|
var contentItem = (ContentItem)Model.ContentItem;
|
||||||
|
var document = (LayoutDocument)Model.Document;
|
||||||
|
var documentText = document.ToString(separator: Environment.NewLine).RemoveTags();
|
||||||
|
var excerpt = new HtmlString(Html.Excerpt(documentText, 200).ToString().Replace(Environment.NewLine, "</p>" + Environment.NewLine + "<p>"));
|
||||||
|
}
|
||||||
|
<p>@excerpt @Html.ItemDisplayLink(T("more").ToString(), contentItem)</p>
|
Loading…
Reference in New Issue
Block a user