将Sitecore项目url附加到JavaScript变量

将Sitecore项目url附加到JavaScript变量,javascript,sitecore,Javascript,Sitecore,目前我还在学习Sitecore,我想做的是获取Sitecore站点中几个页面的URL,并使用它们在JavaScript中设置一些URL 这是我设置的JavaScript: <script> var page_data = { residentialUrl: '[Sitecore page link]', airportsUrl: '[Sitecore page link]', universitiesUrl:

目前我还在学习Sitecore,我想做的是获取Sitecore站点中几个页面的URL,并使用它们在JavaScript中设置一些URL

这是我设置的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>

变量页_数据={
residentialUrl:“[Sitecore页面链接]”,
airportsUrl:“[Sitecore页面链接]”,
大学URL:“[Sitecore页面链接]”,
OfficeURL:“[Sitecore页面链接]”,
隧道URL:“[Sitecore页面链接]”,
hospitalsUrl:“[Sitecore页面链接]”,
sportsUrl:“[Sitecore页面链接]”,
publicSafteyUrl:“[Sitecore页面链接]”,
政府URL:“[Sitecore页面链接]”
}

如果您将url放在每个url变量的单引号内,它确实有效。但是我想为每个url变量输入一个Sitecore项目的url。我知道如何获取Sitecore项目url,但我不确定在这个实例中如何使用它们来设置上面的url变量?我不想硬编码的链接。我希望从Sitecore中的字段中提取它们。有办法做到这一点吗?

您可以采取的一种方法(假设您的javascript位于Sitecore布局或子布局中)如下(未经测试,但希望会有所帮助)

选择要链接到的项目时,可以从内容编辑器中获取Sitecore ID(替换下面的{your guid here}

另外,我不建议在生产应用程序中硬编码ID:)

C#

JS:


变量页_数据={
居住许可证:,
机场:,
//…等等
}

您可以采取的一种方法(假设您的javascript位于Sitecore布局或子布局中)如下(未经测试,但希望能有所帮助)

选择要链接到的项目时,可以从内容编辑器中获取Sitecore ID(替换下面的{your guid here}

另外,我不建议在生产应用程序中硬编码ID:)

C#

JS:


变量页_数据={
居住许可证:,
机场:,
//…等等
}

您可以在脚本块中使用服务器控件。您希望数据来自Sitecore字段。因此,只需在项目上使用
和链接字段即可。这将是处理它的基本Sitecore方法。

您可以在脚本块中使用服务器控件。您希望数据来自Sitecore字段。因此,只需在项目上使用
和链接字段即可。这将是处理该字段的基本Sitecore方法。

1)哪个项存储该字段? 如果您在多个页面上需要此链接。 -它可以是一个组件,具有指向该项的数据源。 -或者模板“Site Config”中名为“Settings”的siteroot项下的项或您喜欢的其他项

2) asp或ascx

<script>
var page_data = {
  residentialUrl: '<%= residentialUrl %>',
  airportsUrl: '<%= airportsUrl %>'
}
</script>
1) 该字段存储在哪个项目中? 如果您在多个页面上需要此链接。 -它可以是一个组件,具有指向该项的数据源。 -或者模板“Site Config”中名为“Settings”的siteroot项下的项或您喜欢的其他项

2) asp或ascx

<script>
var page_data = {
  residentialUrl: '<%= residentialUrl %>',
  airportsUrl: '<%= airportsUrl %>'
}
</script>


您使用的是什么版本的Sitecore?您可能可以使用Sitecore的ItemService我正在运行Sitecore 7.2您使用的是WebForms还是MVC?WebForms就是我想要的using@gallifrey1212你有没有找到答案?你使用的是什么版本的Sitecore?您可能可以使用Sitecore的ItemService我正在运行Sitecore 7.2您使用的是WebForms还是MVC?WebForms就是我想要的using@gallifrey1212你找到这个问题的答案了吗?对我来说,这似乎是一个简单明了的解决方案。虽然我会进一步简化它。。。你在这里不需要评估。只需使用该语法并删除Page.DataBind()调用。如果要犯生成字符串javascript的错误,请确保正确转义数据。@Bryan我正在使用Page.DataBind()以便支持页面编辑器。您不能使用代码块,否则将得到exception@zzzzBov说得对,但在本例中,可能不需要转义javascript,因为我们输出的是格式良好的URI,其中不包括撇号、反斜杠等。我的答案设计得尽可能简洁,解决了问题所指示的代码(即使用字符串构建类型的方法)\对我来说,U似乎是一个非常简单和直接的解决方案。尽管我会进一步简化它……这里不需要求值。只需使用语法并删除页面。DataBind()如果你要犯字符串生成javascript的错误,请确保正确转义数据。@Bryan我正在使用Page.Databind()所以页面编辑器是受支持的。你不能使用代码块,否则你会得到一个exception@zzzzBov说得对,但在这个例子中,可能不需要为javascript转义,因为我们输出的是格式良好的URI,其中不包括撇号、反斜杠等。我的答案设计得尽可能简洁,解决了t这个问题(即使用字符串构建类型的方法)产生一个锚,它不产生URL值。
产生一个锚,它不产生URL值。
<script>
var page_data = {
  residentialUrl: '<%= residentialUrl %>',
  airportsUrl: '<%= airportsUrl %>'
}
</script>
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;
}