如何在Sitecore中的脚本模板中使用延迟字段?

时间:2015-06-12 10:22:02

标签: sitecore

我正在使用脚本模板。在这个模板中有两个字段源和延迟。我在内容中创建了js文件夹,里面我使用了脚本模板,在服务器端我得到源字段并绑定它。但是我我无法找到如何使用延迟字段。有人可以指导我吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

通常,我不会在我自己的代码中使用任何系统模板,并且假设此模板使用标记为已弃用的字段,我甚至不太愿意使用它,因为Sitecore可能会在将来的版本中完全更改或删除它。该字段似乎非常方便能够直接从文件系统中选择文件,但也非常危险,也允许用户直接上传文件。在我看来,更多的理由不使用这个字段,javascript和css不是你日常的内容编辑活动。

我知道没有任何控件可以呈现此字段类型,我知道,您需要自己处理它。

  1. 创建一个新模板来表示您的脚本。您可以使用Single-Line TextCheckbox字段。
  2. Script Template

    1. 从模板创建项目。仅限开发人员/高级用户的权限。您必须自己输入确切的路径。不推荐使用的server file字段无论如何都将基础数据存储为文本。
    2. Script Items

      1. 获取项目,循环浏览并在前端渲染。
      2. 您可以使用与此类似的代码。我假设你在以前的帖子中使用了Webforms:

        用户Control.ascx

        <asp:Repeater ID="rptScripts" runat="server" OnItemDataBound="rptScripts_ItemDataBound" >
            <ItemTemplate>              
                <asp:Literal runat="server" ID="litInclude" />
            </ItemTemplate> 
        </asp:Repeater>
        

        <强>代码隐藏:

        private const string script = "<script src=\"{0}\" {1}></script>";
        private const string styles = "<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\">";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            var items = Sitecore.Context.Database.SelectItems("/sitecore/content/path/to/scripts/*");
            rptScripts.DataSource = items;
            rptScripts.DataBind();
        }
        
        protected void rptScripts_ItemDataBound(object Sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var item = (Sitecore.Data.Items.Item)e.Item.DataItem;
                var ctrl = (System.Web.UI.WebControls.Literal)e.Item.FindControl("litInclude");
                ctrl.Text = GetMarkup(item);
            }
        }
        
        private string GetMarkup(Sitecore.Data.Items.Item item)
        {
            if (item.TemplateName == "Javascript")
            {
                string defer = (MainUtil.GetBool(item["Defer"], false)) ? "defer" : string.empty;
                return script.FormatWith(item["Source"], defer);        
            }
            else if (item.TemplateName == "Stylesheet")
            {
                return styles.FormatWith(item["Source"]);
            }
            return string.empty;
        }
        

        您最好创建捆绑包,或创建主题包(javascripts和css集),用户可以使用droplink字段进行选择。这将使用户可以灵活地选择不同的样式,但将所有内容保持在品牌指导范围内。