Sitecore 的标准编码模式应该是什么
What should be the standard coding pattern for Sitecore
使用 Sitecore 8.0、MVC、VS2015
我设法根据需要为练习站点生成页脚内容,但想知道做事的标准方法。问题很简单,但试图详细解释。请多多包涵:)
要求:页脚应显示办公室地址,并且内容作者应可对其进行编辑。
Sitecore 模板: 位置,Telephone 1,Telephone 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 个都或多或少相似)
如何改进这个 code/structure(或者)在什么情况下它可能会失败。
我不喜欢在控制器中对字段名称进行硬编码的方式 &
CShtml。如果作者更改字段名称怎么办。如何应对
那.
- 它在真实场景中是如何工作的,比如作者
想要显示第三个 phone 号码。他们会联系开发商吗?
因为这也需要更改设计和代码吗?
这是一个非常广泛的问题,可能会被关闭 - 但这里有一些提示!
就错误处理而言,您的控制器没问题。您真的想为您的站点添加一个全局错误处理程序。这是一个很好的例子:http://www.sitecorenutsbolts.net/2015/10/23/Rendering-Exception-Handling-The-Right-Way/
您有 2 个选择 - 使用常量和字段 ID 而不是名称,这不是一个很好的选择,但可以工作。更好的选择是使用 ORM/Wrapper 来做到这一点。两个不错的是 Fortis and Glass Mapper - 都非常好 - 我为 Fortis 做出了贡献,所以这将是我的推荐。
通常,如果组件的设计发生变化,则需要开发支持。您可以使用诸如 BrainJock's Score 或 ZenGarden 之类的工具来构建您的网站,然后编辑器拥有更多控制权。但仍然可能需要开发人员。
希望这对您有所帮助。有关良好 Sitecore 架构的一些信息,请查看此处:Sitecore Helix and Sitecore Habitat
使用 Sitecore 8.0、MVC、VS2015
我设法根据需要为练习站点生成页脚内容,但想知道做事的标准方法。问题很简单,但试图详细解释。请多多包涵:)
要求:页脚应显示办公室地址,并且内容作者应可对其进行编辑。
数据源:包含上述模板项目的文件夹。
代码:
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 个都或多或少相似)
如何改进这个 code/structure(或者)在什么情况下它可能会失败。
我不喜欢在控制器中对字段名称进行硬编码的方式 & CShtml。如果作者更改字段名称怎么办。如何应对 那.
- 它在真实场景中是如何工作的,比如作者 想要显示第三个 phone 号码。他们会联系开发商吗? 因为这也需要更改设计和代码吗?
这是一个非常广泛的问题,可能会被关闭 - 但这里有一些提示!
就错误处理而言,您的控制器没问题。您真的想为您的站点添加一个全局错误处理程序。这是一个很好的例子:http://www.sitecorenutsbolts.net/2015/10/23/Rendering-Exception-Handling-The-Right-Way/
您有 2 个选择 - 使用常量和字段 ID 而不是名称,这不是一个很好的选择,但可以工作。更好的选择是使用 ORM/Wrapper 来做到这一点。两个不错的是 Fortis and Glass Mapper - 都非常好 - 我为 Fortis 做出了贡献,所以这将是我的推荐。
通常,如果组件的设计发生变化,则需要开发支持。您可以使用诸如 BrainJock's Score 或 ZenGarden 之类的工具来构建您的网站,然后编辑器拥有更多控制权。但仍然可能需要开发人员。
希望这对您有所帮助。有关良好 Sitecore 架构的一些信息,请查看此处:Sitecore Helix and Sitecore Habitat