Использование файла пользовательского класса в Umbraco XSLT - PullRequest
1 голос
/ 15 июля 2010

Я пытаюсь сослаться на файл пользовательского класса в коде XSLT. Я развернул его как файл DLL в каталоге / Bin.

Продолжайте получать эту ошибку:

System.Xml.Xsl.XslTransformException: не удается найти сценарий или внешний объект, который реализует префикс «urn: sso».

Объявления файлов CS:

namespace SSOUtilities
{
      public class sso

XSLT Ссылка:

<xsl:stylesheet 
version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:sso="urn:sso"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:umbraco.contour="urn:umbraco.contour" 
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets umbraco.contour sso">

объявление config / xsltExtensions.config:

<ext assembly="/bin/SSOUtilities" type="SSOUtilities.sso" alias="sso" />

Ответы [ 4 ]

4 голосов
/ 15 июля 2010

В Umbraco 4.5 вам больше не нужно помещать / bin / в объявление config / xsltExtensions.config, так что это может быть причиной вашей ошибки, если вы используете Umbraco 4.5.

http://our.umbraco.org/wiki/about/roadmap/umbraco-45/upgrading-to-umbraco-45

3 голосов
/ 15 июля 2010

Позвольте мне добавить еще один ответ с полным примером одного из моих расширений.Класс Embed.cs:

using System.Web;
using umbraco.BusinessLogic;

namespace Omega.XsltExtensions
{
    public class Embed
    {
        public static void LogEmbed(int nodeId)
        {
            Log.Add(LogTypes.Open, new User(0), nodeId, "Embedded pano, referer: " + HttpContext.Current.Request.UrlReferrer);
        }
    }
}

Он создается как Omega.XsltExtensions.dll и копируется в каталог / bin Умбрако.

В моем xsltExtensions.config я добавил:

<ext assembly="/bin/Omega.XsltExtensions" type="Omega.XsltExtensions.Embed" alias="Ext.Embed" />

Пустой XSLT-файл, использующий это расширение, выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
  <!ENTITY nbsp "&#x00A0;">
]>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" 
xmlns:Ext.Embed="urn:Ext.Embed"
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets Ext.Embed ">

  <xsl:output method="xml" omit-xml-declaration="yes"/>

  <xsl:param name="currentPage"/>

  <xsl:template match="/">
      <xsl:value-of select="Ext.Embed:LogEmbed($currentPage/@id)"/>
  </xsl:template>

</xsl:stylesheet>

Надеемся, что вы можете заметить любые упущения в своей версии при сравнении с этой.

1 голос
/ 15 июля 2010

В результате возникла проблема с синтаксисом в xsltExtensions.config

  <ext assembly="/bin/Umbraco.Forms.Core" type="Umbraco.Forms.Library" alias="umbraco.contour">
  <ext assembly="/bin/SSOUtilities" type="SSOUtilities.sso" alias="sso" />
  </ext>

Обратите внимание на закрывающий тег, который установщик Contour поместил в файл.

1 голос
/ 15 июля 2010

Вы также должны добавить "sso" к своим префиксам exclude-result-result, чтобы он работал.

Кроме того, ваш класс должен наследоваться от ApplicationBase, и я не уверен, будет ли работать статический класс:

public class sso : ApplicationBase

И это использует umbraco. BusinessLogic, если я не ошибаюсь.

...