.ascx ユーザー コントロールを作成しましたが、それを xslt レンダリングに含める方法を探しています。これどうやってするの?私はSitecoreのためにそれをやっています。プレースホルダーを作成するかもしれないと思ったのですが、レンダリングでプレースホルダーを定義することはできません。あなたが提供できる助けに感謝します。
2 に答える
次の理由により、ASCX ファイルを xslt ファイルに含めることはできません。XSLT は XML を HTML または XML またはプレーン テキストに変換しますが、ASP.NET ページには変換しません。
xslt ファイルを ascx に含めることはできますが、ascx を xslt ファイルに含めることはできません。最善の方法は、xslt ファイルを ascx ファイルに変更し、そこにプレースホルダーまたは直接 を含めることです。XSLT の使用を避けることをお勧めします。
これらは非常に使いやすいように見えますが、コードをリファクタリングするのは非常に困難です。
XSLT ファイルから直接ユーザー コントロール (.ascx) を呼び出すことはできません。ただし、達成したい内容に応じて、XSLT ファイルから XSLT 拡張メソッドと呼ばれる .net メソッドを呼び出すことができます。たとえば、カスタム .Net GetData() メソッドを呼び出すには、以下のようなコードを記述する必要がある場合があります。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:customObject="urn:yourNamespace">
<new-data>
<xsl:value-of select="customObject:GetData()"/>
</new-data>
...
もちろん、使用する前にタイプを登録する必要があります。型の登録は web.config に行うか、XSLTArgumentListクラスのAddExtensionObjectMethodを呼び出して動的に行うことができます。
Sitecore は XSLT 拡張コントロールも提供していますが、拡張メソッドとは異なり、これは .net 機能ではありません。XSL 拡張コントロールは、.NET クラスに対応する XSL レンダリングの XML 要素です。たとえば、XSL 拡張コントロールは Sitecore.Web.UI.XslControls.Text .NET クラスに対応します。XSLT ファイルでは次のように消費されます。
XSL 拡張コントロールは、XSL コードのスタンドアロン要素です。
カスタムタイプを登録するには、以下を追加しますweb.config の要素:
<extension mode="on" type="NamespaceName.ClassName, AssemblyName" namespace="http://www.w3.org/1999/XSL/Transform" singleInstance="true"/>
参照: http://sdn.sitecore.net/upload/sitecore6/64/presentation_component_xsl_reference_sc62-64-a4.pdf