2010-07-14 8 views
1

Je tente de référencer un fichier de classe personnalisé dans du code XSLT. Je l'ai déployé en tant que fichier DLL dans le répertoire/Bin.Utilisation d'un fichier de classe personnalisé dans Umbraco XSLT

cette erreur continue à obtenir:

System.Xml.Xsl.XslTransformException: Cannot find the script or external object that implements prefix 'urn:sso'.

CS Déclarations de fichier:

namespace SSOUtilities 
{ 
     public class sso 

XSLT Référence:

<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/déclaration xsltExtensions.config:

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

Répondre

1

Vous devez également ajouter "sso" à vos préfixes exclude-result, cela devrait fonctionner. Aussi

, votre classe doit hériter de ApplicationBase et je ne suis pas sûr si une classe statique fonctionnera:

public class sso : ApplicationBase 

Et qui utilise umbraco.BusinessLogic si je ne me trompe pas.

+0

Ajouté "sso" à la fin. Mais toujours la même erreur. – JGrimm

+0

Sans les citations, j'espère? :) – sebastiaan

+0

Hah, ya, sans les guillemets. Laissez-moi essayer l'héritage que vous avez mentionné. Merci pour l'aide! – JGrimm

3

Permettez-moi d'ajouter une autre réponse avec un exemple complet d'un de mes extensions. La classe 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); 
     } 
    } 
} 

Ceci est construit comme Omega.XsltExtensions.dll et copié dans le répertoire de Umbraco/bin.

Dans mon xsltExtensions.config J'ai ajouté:

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

Un fichier XSLT vide qui utilise cette extension ressemble à ceci:

<?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> 

Espérons que vous pouvez repérer les omissions dans votre version quand vous le comparez à celui-ci.

1

Il a fini par être un problème de syntaxe dans la 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> 

Notez la balise de fermeture qui installation Contour placé dans le fichier.