这是Content.ThumbnailSummary.cshtml
的标记,它是我用来将ContentItems呈现为可点击缩略图的自定义DisplayType,其内容绝对位于它们之上。Orchard是否可以在渲染之前动态更改形状中的HTML?
@using Orchard.Utility.Extensions;
@{
var contentTypeClassName = ((string)Model.ContentItem.ContentType).HtmlClassify();
}
<a class="content-item @contentTypeClassName thumbnail-summary">
@Display(Model.Header)
<div class="thumbnail-summary-inner">
@Display(Model.Content)
</div>
@Display(Model.Footer)
</a>
的问题是,开箱即用的大部分地区和领域得到呈现为链接或包含链接的段落,并嵌套<a>
标签搞乱DOM渲染在大多数浏览器相当严重。 ThumbnailSummary应该永不包含任何链接。
我可以为每个字段和部分创建替代字段,或者我可以在放置时删除所有内容,并且只根据需要为特定案例添加规则。但是这将非常繁琐,并且失去了很多放置的好处,所以我希望我能够以某种方式去掉或替换代码中的所有<a>
标签,仅用于具有此DisplayType的形状。
我一直在寻找在这个方向上,但我不知道这是否是可行的:
public class Shapes : IShapeTableProvider
{
public void Discover(ShapeTableBuilder builder)
{
builder.Describe("Content")
.OnDisplaying(displaying =>
{
if (displaying.ShapeMetadata.DisplayType == "ThumbnailSummary")
{
// Do something here???
}
});
}
}