使用Sitecore 8.0,MVC,VS2015
我设法根据需要为练习网站生成页脚内容,但想知道标准的做事方式。问题很简单,但试图详细解释。请忍受:)
要求:页脚应显示Office地址,内容作者应该可以编辑它们。
Sitecore模板:位置,电话1,电话2,IsActive(类型复选框)。
数据源:包含上述模板项目的文件夹
代码:
public class FooterViewModel
{
public List<Sitecore.Data.Items.Item> Addresses { get; set; }
}
public class FooterController : Controller
{
public ActionResult Footer()
{
var datasource = RenderingContext.Current.Rendering.Item;
FooterViewModel viewModel = new FooterViewModel();
viewModel.Addresses = new List<Item>();
if(datasource != null && datasource.HasChildren && datasource.Children.Count > 0)
{
foreach(Item address in datasource.Children)
{
if (address["IsActive"] == "1")
viewModel.Addresses.Add(address);
}
}
return View("~/Views/Shared/Footer.cshtml", viewModel);
}
}
使用Sitecore控制器渲染渲染html cshtml:
@using Sitecore.Mvc
@using Sitecore.Mvc.Presentation
@model Democore.Models.FooterViewModel
<div>
@foreach (var address in Model.Addresses)
{
<div>
<h3>@Html.Sitecore().Field("Location", address)</h3>
<ul>
<li>
@Html.Sitecore().Field("Telephone 1", address)
</li>
<li>
@Html.Sitecore().Field("Telephone 2", address)
</li>
</ul>
</div>
}
</div>
<div>
<p>© Copyright @DateTime.Now.Year. All rights reserved</p>
</div>
以下是我的问题。 (..所有3个或多或少相似)
如何改进此代码/结构(或),在哪种情况下可能会失败。
我不喜欢我在控制器和硬盘中硬编码字段名称的方式。 CSHTML。如果作者更改字段名称该怎么办?如何解决 这一点。
答案 0 :(得分:1)
这是一个非常广泛的问题,可能会被关闭 - 但这里有一些提示!
就错误处理而言,你的控制器很好。您真的想为您的网站添加全局错误处理程序。这是一个很好的例子:http://www.sitecorenutsbolts.net/2015/10/23/Rendering-Exception-Handling-The-Right-Way/
你有两个选择 - 使用常量和字段ID不是名字,不是一个很好的选择,但有效。更好的选择是使用ORM / Wrapper来做到这一点。两个好的是Fortis和Glass Mapper - 两者都非常好 - 我为富通做出了贡献,这将是我的推荐。
通常,如果组件的设计发生变化,则需要开发支持。您可以使用像BrainJock的分数或ZenGarden这样的东西来构建您的网站,然后编辑器可以获得更多控制权。但仍有可能需要开发人员。
希望这会有所帮助。有关良好的Sitecore架构的一些信息,请查看此处:Sitecore Helix和Sitecore Habitat