![](/img/trans.png)
[英]retrieve the key of keyword directly in Dreamweaver in SDL Tridion 2011 Sp1
[英]Write Tridion dreamweaver identifier as output package
在处理复合页面模板项目时,我发现了一个非常有趣的问题。 客户在其定制开发的应用程序中使用$ {stringvalue-session-or-something-specific} ,使用XSLT将其保存并呈现在组件模板中。 当尝试渲染包含保留的Tridion Dreamweaver标识符($ {})的组件演示文稿时,我遇到类似于Template Builder的错误
JScriptException:表达式'“” [“ scopedTarget.personalia”]。“”!=“”'在Tridion.ContentManager.Templating的Tridion.ContentManager.Templating.Expression.JScriptEvaluator.EvaluateToObject(String语句)发生错误“ Expected identifier”。 Expression.JScriptEvaluator.EvaluateToString(String语句)
客户不接受删除和替换此标识符的解决方案。 我想知道解决这个问题的最佳解决方案是什么? 要么使用C#代码来呈现组件演示文稿,要么创建一些自定义重写(如果可能,因为我从组件演示文稿中出错了)。
如果客户在应用程序中使用JSP EL(使用相同的${...}
语法)并将其封装在模板中,则会发生类似的情况。
最常见的解决方案是使用Dreamweaver模板中的$[...]
替换此语法,并在Dreamweaver模板之后使用.Net TBB ,该模板使用字符串替换或正则表达式进行转换。
请参阅我的要点以获取执行此操作的示例TBB。
我通常使用此代码“在模板中启用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);
}
}
}
如果您绝对不能更改Dreamweaver模板中的语法(如我所述,我不确定我是否完全理解/同意这样做的原因),那么也许可以改为使用Razor介体进行模板制作?
正如我提到的,替换语法不是解决方案。 我已经通过在Dreamweaver模板之前的单独C#tbb中呈现组件演示文稿来解决了此问题。 当然,如果允许您更改语法,David建议会很有用。
我使用SDL Tridion 2011 SP1 HR1。 TemplateBuilder版本6.1 Build 6.1.0.73。 从下面的DWT代码之前执行的Page中提取组件。
<!-- TemplateBeginRepeat name="Components" -->
@@ RenderComponentPresentation()@@
<!-- TemplateEndRepeat -->
如果组件演示文稿包含$ {sometext},则从“模板”构建器记录输出错误。
JScriptException:Expression'“”[“scopedTarget.personalia”]。“”!=“”'在Tridion.ContentManager.Templating的Tridion.ContentManager.Templating.Expression.JScriptEvaluator.EvaluateToObject(String语句)中出现错误'Expected identifier'。 Tridion的Tridion.ContentManager.Tempaging.Dreamweaver.DreamweaverMediator.TransformValueReferences(包包,StringReference templateReference,Regex startTagExpression,String endTag)中的Tridion.ContentManager.Templating.Package.EvaluateExpression(String表达式)中的Expression.JScriptEvaluator.EvaluateToString(String语句) .ContentManager.Templating.Dreamweaver.DreamweaverMediator.TransformRegions(包package,String dreamweaverTemplate)在Tridion.ContentManager.Templating.Dreamweaver.DreamweaverMediator.Transform(Engine engine,Template templateToTransform,Package package)的Tridion.ContentManager.Templating.Engine.ExecuteTemplate(模板模板,打包程序包)位于Tridion.ContentManager.Templating.Engine.InvokeTemplate(P Tridion的Tridion.ContentManager.Templating.Engine.ExecuteTemplate(模板模板,包软件包)中的Tridion.ContentManager.Templating.Compound.CompoundTemplateMediator.Transform(Engine engine,Template templateToTransform,Package package)的ackage包,TemplateInvocation templateInvocation,Template template位于Tridion.ContentManager.Templating.Debugging.DebuggingEngine.Run()的Tridion.ContentManager.Templating.Engine.TransformPackage(模板模板,包软件包)中的.ContentManager.Templating.Engine.InvokeTemplate(包软件包,TemplateInvocation templateInvocation,模板模板) Tridion.ContentManager.Templating.Debugging.DebugSession.Run()---引起:预期的标识符eval代码:第1行 - 错误:预期的标识符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.