我正在使用脚本模板。在这个模板中有两个字段源和延迟。我在内容中创建了js文件夹,里面我使用了脚本模板,在服务器端我得到源字段并绑定它。但是我我无法找到如何使用延迟字段。有人可以指导我吗?
答案 0 :(得分:1)
通常,我不会在我自己的代码中使用任何系统模板,并且假设此模板使用标记为已弃用的字段,我甚至不太愿意使用它,因为Sitecore可能会在将来的版本中完全更改或删除它。该字段似乎非常方便能够直接从文件系统中选择文件,但也非常危险,也允许用户直接上传文件。在我看来,更多的理由不使用这个字段,javascript和css不是你日常的内容编辑活动。
我知道没有任何控件可以呈现此字段类型,我知道,您需要自己处理它。
Single-Line Text
和Checkbox
字段。
server file
字段无论如何都将基础数据存储为文本。
您可以使用与此类似的代码。我假设你在以前的帖子中使用了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字段进行选择。这将使用户可以灵活地选择不同的样式,但将所有内容保持在品牌指导范围内。