sitecore: получить абсолютный URL в xslt рендеринг - PullRequest
2 голосов
/ 22 ноября 2010

Я хочу передать абсолютный URL-адрес текущей страницы службам обмена facebook / twitter / linkedin.Как получить абсолютный URL-адрес страницы из рендеринга xslt

Ответы [ 2 ]

4 голосов
/ 20 апреля 2012

Я понимаю, что это старый вопрос, но полученный ответ на самом деле не полная картина. Вы можете создать расширение 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(.)" />
4 голосов
/ 22 ноября 2010

Я могу, по крайней мере, рассказать вам, как это делается в подслое .NET, но не уверен, поможет ли это:

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

Установите другие параметры для urlOptions соответствующим образом.

Счастливое кодирование.

...