我目前还在学习Sitecore,我想要做的是获取Sitecore网站中几个网页的网址,并使用它们在JavaScript中设置一些网址。
这是我设置的JavaScript:
<script>
var page_data = {
residentialUrl: '[Sitecore page link]',
airportsUrl: '[Sitecore page link]',
universitiesUrl: '[Sitecore page link]',
officesUrl: '[Sitecore page link]',
tunnelsUrl: '[Sitecore page link]',
hospitalsUrl: '[Sitecore page link]',
sportsUrl: '[Sitecore page link]',
publicSafteyUrl: '[Sitecore page link]',
governmentUrl: '[Sitecore page link]'
}
</script>
如果您将url放在每个url变量的单引号内,它确实有效。但我想要的是为每个url变量添加Sitecore项目的url。我知道如何获取Sitecore项目网址,但我不确定如何在此实例中使用它们来设置上面的网址变量?我不想对链接进行硬编码。我希望它们可以从Sitecore中的字段中删除。有没有办法做到这一点?
答案 0 :(得分:0)
您可以采取的一种方法(假设您的javascript位于Sitecore布局或子布局中)如下(未经测试但希望有所帮助)。
您可以在选择要关联的项目时从内容编辑器获取Sitecore ID(请在下方替换 {your-guid-here} )。
此外,我不建议在生产应用中使用硬编码ID:)
C#
protected void Page_Load(object sender, EventArgs e)
{
Page.DataBind();
}
protected string ResidentialUrl {
get {
return GetUrl("**{your-guid-here}**");
}
}
protected string AirportsUrl {
get {
return GetUrl("**{your-guid-here}**");
}
}
private string GetUrl(string guid)
{
// get item from the current database (usually web or master)
var item = Sitecore.Context.Database.GetItem(new Sitecore.Data.ID(guid));
// use LinkManager to get the public URL
return Sitecore.Links.LinkManager.GetItemUrl(item);
}
JS:
<script>
var page_data = {
residentialUrl: '<%#Eval("ResidentialUrl")%>',
airportsUrl: '<%#Eval("AirportsUrl")%>',
// ... etc
}
</script>
答案 1 :(得分:0)
1)在哪个项目中存储该字段? 如果您需要多个页面上的此链接。 - 它可以是具有项目数据源的组件。 - 或名为&#34;设置&#34;的siteroot项目下方的项目来自模板&#34; Site Config&#34;或者你喜欢的事情。
2)asp或ascx
<script>
var page_data = {
residentialUrl: '<%= residentialUrl %>',
airportsUrl: '<%= airportsUrl %>'
}
</script>
3)站点站点设置节点的示例背后的示例
public string residentialUrll { get; set; }
private void Page_Load(object sender, System.EventArgs e)
{
var siteConfigNode = GetConfigNode();
if (siteConfigNode == null) { return; }
InternalLinkField internalink = siteConfigNode.Fields[residentialUrll];
if (internalink != null && internalink.TargetItem != null)
{
residentialUrl = Sitecore.Links.LinkManager.GetItemUrl(internalink.TargetItem);
}
}
// get the config node it is the item below the siteroot with Template "Site Config"
public static Item GetConfigNode()
{
Sitecore.Sites.SiteContext site = Sitecore.Context.Site;
if (site == null) return null;
Sitecore.Data.Database db = Sitecore.Context.Database;
if (db == null) return null;
Item start = db.GetItem(site.StartPath);
if (start == null) return null;
var siteConfigNode = start.Parent.Children.FirstOrDefault(item => item.TemplateName == "Site Config");
return siteConfigNode;
}
答案 2 :(得分:-1)
您可以在脚本块中使用服务器控件。并且您希望数据来自Sitecore字段。因此,只需在项目上使用<sc:Link>
和链接字段即可。这将是Sitecore处理它的基本方法。