将Sitecore项目网址附加到JavaScript变量

时间:2015-03-09 16:33:08

标签: javascript sitecore

我目前还在学习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中的字段中删除。有没有办法做到这一点?

3 个答案:

答案 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处理它的基本方法。