我有一个客户想要为他的网站设计单页,每个"页面"的内容在用户导航网站时使用javascript显示/隐藏.
我不确定使用Orchard来解决这个问题的最佳方法.一种选择是将内容全部放在单个页面内容项上,但是您失去了使用Orchard的导航功能的能力,并且不能让客户考虑页面方面的管理.
有没有人有关于如何在Orchard CMS中进行最佳设置的想法或经验?
这是我根据Bertrand的建议使用的解决方案:
public ActionResult Display(int id)
{
var contentItem = _contentManager.Get(id, VersionOptions.Published);
dynamic model = _contentManager.BuildDisplay(contentItem);
var ctx = _workContextAccessor.GetContext();
ctx.Layout.Metadata.Alternates.Add("Layout_Null");
return new ShapeResult(this, model);
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个带有控制器的新模块,其中包含上面的操作方法.action方法获取内容部分id的参数._contentManager和_workContextAccessor对象正在注入控制器.Layout.Null.cshtml视图的创建与Bertrand建议的完全一样.
这就是我要做的就是在不牺牲SEO,客户端性能和可维护性的情况下实现那种非常完美的体验:仍然将网站"经典地"创建为一组页面,博客文章等,并使用自己的URL.这是主页布局应该是不同的,并使用Ajax调用带来其他页面的内容.我一直用来显示与常规内容项相同内容的一种方法,但是来自Ajax调用(所以没有内容的chrome,没有带样式表,因为它已经存在,等等)是一个单独的控制器操作,以"null布局"返回内容:
var ctx = _workContextAccessor.GetContext();
ctx.Layout.Metadata.Alternates.Add("Layout_Null");
return new ShapeResult(this, shape);
Run Code Online (Sandbox Code Playgroud)
然后,我的视图中有一个Layout.Null.cshtml文件,如下所示:
@{
Model.Metadata.Wrappers.Clear();
}
@Display(Model.Content)
Run Code Online (Sandbox Code Playgroud)
清除包装器会从document.cshtml中删除呈现,而模板本身只呈现一个区域Content.所以渲染的只是内容而不是其他内容.非常适合从ajax调用注入.
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
3444 次 |
| 最近记录: |