sitecore:在xslt渲染中获取绝对URL

时间:2010-11-22 07:42:58

标签: sitecore

我想将当前页面的绝对网址传递给facebook / twitter / linkedin的共享服务。 如何从xslt渲染

获取页面的绝对URL

2 个答案:

答案 0 :(得分:4)

我至少可以告诉你这是如何在.NET子布局中完成的,不确定这是否有帮助:

Sitecore.Links.UrlOptions urlOptions = new Sitecore.Links.UrlOptions();
urlOptions.AlwaysIncludeServerUrl = true;
string url = Sitecore.Links.LinkManager.GetItemUrl(Sitecore.Context.Item, urlOptions);

根据需要在urlOptions上设置其他选项。

快乐的编码。

答案 1 :(得分:4)

我意识到这是一个古老的问题,但真正给出的答案并不是全貌。您可以构建一个XSLT扩展来处理这个问题:

public class XslExtensions : Sc.Xml.Xsl.XslHelper 
{
    public string GetUrl(XPathNodeIterator iterator)
    {
        Sc.Data.Items.Item item = this.GetRequiredItem(iterator);
        return item.GetUrl(); // Extension method for Item that returns the URL as a string
    }

    public Sc.Data.Items.Item GetRequiredItem(XPathNodeIterator iterator)
    {
        Sc.Diagnostics.Assert.IsNotNull(iterator, "iterator");

        if (!iterator.MoveNext())
        {
            XsltException ex = new XsltException("No iterator.");
            Sc.Diagnostics.Log.Error(ex.Message, ex, this);
            throw ex;
        }

        Sc.Data.Items.Item item = this.GetItem(iterator);

        if (item == null)
        {
            XsltException ex = new XsltException("No item.");
            Sc.Diagnostics.Log.Error(ex.Message, ex, this);
            throw ex;
        }

        return item;
    }
}

然后,您需要将包含上述内容的类添加到<xslExtensions>节点:

<extension mode="on" type="MyProject.XslExtensions, MyProject" namespace="http://myproject.com/extensions" singleInstance="true" />

最后你可以使用这个方法。首先参考扩展......

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:sc="http://www.sitecore.net/sc"
    xmlns:sql="http://www.sitecore.net/sql"
    xmlns:myp="http://myproject.com/extensions"
    exclude-result-prefixes="sc sql myp">

然后使用!

<xsl:value-of select="myp:GetUrl(.)" />