2

複合ページ テンプレート プロジェクトに取り組んでいるときに、非常に興味深い問題を発見しました。顧客は、カスタム開発アプリケーションで${stringvalue-session-or-something-specific}を使用します。これらのアプリケーションは、XSLT を使用してコンポーネント テンプレートに保存およびレンダリングされます。予約された Tridion dreamweaver 識別子 (${}) を含むコンポーネント プレゼンテーションをレンダリングしようとすると、次のような Template Builder エラーが発生しました。

JScriptException: 式 '""["scopedTarget.personalia"]."" != ""' で、Tridion.ContentManager.Templating.Expression.JScriptEvaluator.EvaluateToObject(String statement) at Tridion.ContentManager.Templating でエラー 'Expected identifier' が発生しました。 Expression.JScriptEvaluator.EvaluateToString(文字列ステートメント)

この識別子を削除して置き換えることは、お客様が受け入れるソリューションではありません。この問題に対処するための最良の解決策は何だろうと思っていましたか? C# コードを使用してコンポーネント プレゼンテーションをレンダリングするか、カスタム リライトを作成する可能性があります (コンポーネント プレゼンテーションからエラーが発生したために可能であれば)。

4

5 に答える 5

4

顧客が同じ構文を使用するアプリケーションで JSP EL を使用し、${...}これをテンプレートにカプセル化したい場合にも、同様のことが起こります。

最も一般的な解決策は、この構文を Dreamweaver テンプレートのようなものに置き換え、文字列置換または正規表現を使用して変換する Dreamweaver テンプレートの$[...]に.Net TBBを使用することです。

これを行うTBBの例については、私の要旨を参照してください。

于 2013-01-22T09:13:32.007 に答える
2

私は通常、このコードを「テンプレートで JSTL を有効にする」ために使用します。Tridion を変更して別のコード識別子を使用することはできないため、マークアップを変更する必要があります。テンプレートの最後でこの TBB を実行して$[expression]${expression}

using System;
using System.Text.RegularExpressions;
using Tridion.ContentManager.Templating;
using Tridion.ContentManager.Templating.Assembly;

namespace TridionTemplates
{
    [TcmTemplateTitle("Enable JSTL")]
    public class EnableJSTL : ITemplate
    {
        private static readonly Regex JstlRegex = new Regex(@"\$\[.*\]");
        public void Transform(Engine engine, Package package)
        {
            Item outputItem = package.GetByName(Package.OutputName);
            string outputText = outputItem.GetAsString();
            Match match = JstlRegex.Match(outputText);
            while (match.Success)
            {
                String replaceJstl = match.Value.Replace("[", "{");
                replaceJstl = replaceJstl.Replace("]", "}");
                outputText = outputText.Replace(match.Value, replaceJstl);
                match = match.NextMatch();
            }
            outputItem.SetAsString(outputText);
            package.Remove(outputItem);
            package.PushItem(Package.OutputName, outputItem);
        }
    }
}
于 2013-01-22T13:20:37.847 に答える
1

Dreamweaver テンプレートの構文を絶対に変更できない場合 (私が述べたように、その理由を完全に理解しているか、同意しているかはわかりません)、代わりにテンプレートにRazor Mediatorを使用することに切り替えることができますか?

于 2013-01-22T12:42:40.720 に答える
0

先に述べたように、構文の置き換えは解決策ではありません。Dreamweaverテンプレートの前に別のC#tbbでコンポーネントのプレゼンテーションをレンダリングすることで、これを解決しました。もちろん、構文の変更が許可されている場合は、Davidの提案が役立ちます。

于 2013-01-22T11:21:00.553 に答える
0

SDL Tridion 2011 SP1 HR1 を使用しています。TemplateBuilder バージョン 6.1 ビルド 6.1.0.73。以下の DWT コードの前に実行されたページからコンポーネントを抽出します。

<!-- TemplateBeginRepeat name="Components" --> 

@@RenderComponentPresentation()@@

<!-- TemplateEndRepeat -->

コンポーネント プレゼンテーションに ${sometext} が含まれている場合に、テンプレート ビルダーから出力エラーがログに記録されます。

JScriptException: 式 '""["scopedTarget.personalia"]."" != ""' で Tridion.ContentManager.Templating.Expression.JScriptEvaluator.EvaluateToObject(String statement) at Tridion.ContentManager.Templating でエラー 'Expected identifier' が発生しました。 Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.TransformValueReferences の Expression.JScriptEvaluator.EvaluateToString(String statement).ContentManager.Templating.Package.EvaluateExpression(String expression) Tridion の TransformValueReferences(パッケージ パッケージ、StringReference templateReference、Regex startTagExpression、String endTag) Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.Tridion.ContentManager.Templating.Engine.ExecuteTemplate(テンプレート テンプレート、パッケージ パッケージ) の Transform(エンジン エンジン、Template templateToTransform、パッケージ パッケージ) Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージ パッケージ、TemplateInvocation templateInvocation、テンプレート テンプレート) at Tridion .ContentManager.Templating.Compound.CompoundTemplateMediator.Transform(エンジン エンジン、テンプレート templateToTransform、パッケージ パッケージ) で Tridion.ContentManager.Templating.Engine.ExecuteTemplate(テンプレート テンプレート、パッケージ パッケージ) で Tridion.ContentManager.Templating.Engine.InvokeTemplate(パッケージ パッケージ) 、TemplateInvocation templateInvocation、テンプレート テンプレート) の Tridion.ContentManager.Templating.Engine.TransformPackage(テンプレート テンプレート、パッケージ パッケージ) の Tridion.ContentManager.Templating.Debugging。Tridion.ContentManager.Templating.Debugging.DebugSession.Run() での DebuggingEngine.Run() --- 原因: 予想される識別子 eval コード: 1 行目 - エラー: 予想される識別子

于 2013-01-23T07:44:53.130 に答える