Sitecore

时间:2016-08-28 09:33:26

标签: asp.net-mvc sitecore sitecore8

使用Sitecore 8.0,MVC,VS2015
我设法根据需要为练习网站生成页脚内容,但想知道标准的做事方式。问题很简单,但试图详细解释。请忍受:)

要求:页脚应显示Office地址,内容作者应该可以编辑它们。 enter image description here 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>&copy Copyright @DateTime.Now.Year. All rights reserved</p>
</div>

以下是我的问题。 (..所有3个或多或少相似)

  1. 如何改进此代码/结构(或),在哪种情况下可能会失败。

  2. 我不喜欢我在控制器和硬盘中硬编码字段名称的方式。     CSHTML。如果作者更改字段名称该怎么办?如何解决     这一点。

  3. 它如何在真实场景中起作用,例如,如果是作者     想要显示第三个电话号码。他们会联系开发者吗?     因为这需要改变设计和代码太对了?

1 个答案:

答案 0 :(得分:1)

这是一个非常广泛的问题,可能会被关闭 - 但这里有一些提示!

  1. 就错误处理而言,你的控制器很好。您真的想为您的网站添加全局错误处理程序。这是一个很好的例子:http://www.sitecorenutsbolts.net/2015/10/23/Rendering-Exception-Handling-The-Right-Way/

  2. 你有两个选择 - 使用常量和字段ID不是名字,不是一个很好的选择,但有效。更好的选择是使用ORM / Wrapper来做到这一点。两个好的是FortisGlass Mapper - 两者都非常好 - 我为富通做出了贡献,这将是我的推荐。

  3. 通常,如果组件的设计发生变化,则需要开发支持。您可以使用像BrainJock的分数或ZenGarden这样的东西来构建您的网站,然后编辑器可以获得更多控制权。但仍有可能需要开发人员。

  4. 希望这会有所帮助。有关良好的Sitecore架构的一些信息,请查看此处:Sitecore HelixSitecore Habitat