创建用于插入JavaScript的Sitecore cshtml渲染

时间:2016-09-30 20:08:34

标签: javascript razor sitecore

我需要创建一个cshtml渲染和Sitecore控件,允许我从Sitecore字段插入JavaScript。然后我可以将此控件附加到布局以在页面上插入JavaScript。

我尝试将<script>插入到使用富文本编辑器的控件中,但Sitecore默认从编辑器中删除了<script>,这使我得到了这个解决方案。

我知道基础知识 - 需要有cshtml渲染,一个模板(假设只有一个字段,一个多行文本字段),以及一个带有cshtml文件路径的布局渲染,但不止于此。

开发人员使用了Glass Mapper,我不知道它如何影响上述内容,或者如何重新实现它。这将是我的第一个控制。这是一个示例cshtml文件,如果它有帮助:

@inherits Glass.Mapper.Sc.Web.Mvc.GlassView<Company.Model.TDS.sitecore.templates.User_Defined.Company.Platform.Modules.Common.Sidebar_Text_Callout>

    @if (Model != null)
    {
        <div class="sidebar-text-callout">
            <h3>@Editable(Model, x => x.Sidebar_Callout_Title)</h3>
            <p>@Editable(Model, x => x.Sidebar_Callout_Copy)</p>
            @if (Model.Sidebar_Callout_Link != null)
            {
                <div class="all-caps-callout">
                    <a class="link-with-icon" href="@Model.Sidebar_Callout_Link.Url" target="@Model.Sidebar_Callout_Link.Target">@Model.Sidebar_Callout_Link.Text <span class="svg">@Html.Partial("~/Views/Icons/arrowRight.cshtml")</span></a>
                </div>
            }
        </div>
    }

1 个答案:

答案 0 :(得分:2)

根据您提供的示例代码中的模型命名空间来判断,您的开发人员使用TDS及其code generation功能来生成Sidebar_Text_Callout类。

我建议您坚持使用相同的过程来创建JavaScript呈现。创建基于Glass的视图渲染的说明过于宽泛,无法涵盖在此上下文中,因此我在下面列出了一些高级步骤。 Glass网站以及Sitecore自己的文档应该更详细地介绍这一点。

  1. 创建包含多行文本字段的数据模板。如果希望脚本在所有语言中相同(或启用回退),请确保在字段上选中“共享”复选框。否则,请保持未选中共享或不配置回退。
  2. 在Sitecore中创建一个新的视图渲染,其路径指向.cshtml文件的位置。
  3. 将“查看渲染”“数据源模板”字段设置为新模板,并配置其余字段。特别重要的是数据源位置(即您要存储数据源项目的位置),缓存(您可能希望至少检查CacheableVary By Data
  4. 如果您希望作者能够通过体验编辑器插入,则将视图渲染添加为占位符(注意:因为这是JavaScript,您可以选择跳过此跳过此步骤)
  5. 右键单击主TDS项目,然后选择“与Sitecore同步”。您应该看到新的Tempalte,布局以及您所做的任何其他更改。使用sync buttons将这些更改提取到TDS中。此过程应自动为您生成新的Glass Mapper模型,您可以立即在View中使用它。
  6. 最后,在您的视图中,引用新模型并输出字段的值。由于我们正在渲染JavaScript,您可能需要输出原始值而不需要 Experience Editor支持。
  7. 示例视图

    @inherits Glass.Mapper.Sc.Web.Mvc.GlassView<Company.Model.TDS.sitecore.templates.User_Defined.Company.Platform.Modules.Common.PageLevelJavaScript>
    
    @if (Model != null)
    {
        @Html.Raw(Model.MyJavaScriptField)
    }