Tridion:Dreamweaver 不会解析 HTML 代码字段



我们有一个复合CT,它输出其中一个组件的代码字段。

CT的dream weaver部分如下:

<!-- TemplateBeginRepeat name="Component.HTMLCode" -->
    @@Component.HTMLCode@@
<!-- TemplateEndRepeat -->

但是,此CT在页面上显示代码字段,而不是转换为HTML。

例如:如果代码字段的值为-><div align="center" id="loginapp"></div>然后,这个相同的值显示在页面上,而不是解析。

在页面源中,我们得到的输出为"<div align=&quot;center"id=&loginapp&gt;&lt;/div&gt"

我知道如果我们使用C#可以解决这个问题。但是有没有办法使用dreamweaver来阻止特殊角色的转换?

您应该使用dwt将代码发布到服务器,我的意思是为每个代码创建新的dwt,然后将代码粘贴到dwt中。您可以将此dwt与emply组件或资源类型组件一起使用。

或者,如果您想使用文本字段,请尝试以下tbb代码。在模板的末尾添加这个tbb。

public override void Transform(Engine engine, Package package)
    {

        Regex objExp = new Regex(@"&#d+;", RegexOptions.IgnoreCase);
        Regex objDecExp = new Regex(@"[^0-9]", RegexOptions.IgnoreCase);
        this.Initialize(engine, package);
        string strPackage = package.GetValue("Output");
        strPackage = unescapeHTML(strPackage);
        strPackage = objExp.Replace(strPackage, delegate (Match match)
        {
            string strInput = match.ToString();
            strInput = objDecExp.Replace(strInput, "");

            int intValue = Convert.ToInt32(strInput);
            char strChar = (char)intValue;
            return strChar.ToString();
        });

        strPackage = strPackage.Trim();
        Item objOutput = package.CreateStringItem(ContentType.Html, strPackage);
        package.PushItem("Output", objOutput);
    }
    private string unescapeHTML(string strInput)
    {
        StringBuilder strOutput = new StringBuilder(strInput);
        strOutput.Replace("&quot;", "&#34;");
        strOutput.Replace("&nbsp;", "&#32;");
        strOutput.Replace("&amp;", "&#38;");
        strOutput.Replace("&apos;", "&#39;");
        strOutput.Replace("&lt;", "&#60;");
        strOutput.Replace("&gt;", "&#62;");
        strOutput.Replace("&iexcl;", "&#161");
        strOutput.Replace("&cent;", "&#162");
        strOutput.Replace("&pound;", "&#163");
        strOutput.Replace("&curren;", "&#164");
        strOutput.Replace("&yen;", "&#165");
        strOutput.Replace("&brvbar;", "&#166");
        strOutput.Replace("&sect;", "&#167");
        strOutput.Replace("&uml;", "&#168");
        strOutput.Replace("&copy;", "&#169");
        strOutput.Replace("&ordf;", "&#170");
        strOutput.Replace("&not;", "&#172");
        strOutput.Replace("&shy;", "&#173");
        strOutput.Replace("&reg;", "&#174");
        strOutput.Replace("&macr;", "&#175");
        strOutput.Replace("&deg;", "&#176");
        return strOutput.ToString();    
    }

}

如果我记得正确的话,这取决于您的字段类型,如果在Schema中使用普通文本字段,那么HTML将被转义,如果使用富文本字段,它将被解析。

一种选择可能是编写一个Dreamweaver自定义函数,该函数允许您取消对字段的映射(将其表示为HTML字段而不是文本字段)。正如您所提到的,您也可以在TBB中执行此操作,但Dreamweaver自定义函数可以直接从DWT模板中调用。不管怎样,我认为你确实需要自己做一些编码。

RenderComponentField有两个参数:bool-htmlEncodeResult和bool-resolveHtmlAsRTFContent。你在使用这个内置函数吗?

感谢您的帮助。在对dreamweaver代码进行了大量的试用后,我们决定使用C#TBB,这解决了这个问题。

另外,将多行字段读取为文本字段也是我们犯下的错误之一。这导致字段值显示在页面上,而不是显示为代码隐藏。

我们最终使用"MultilineTextField"解决了这个问题。

最新更新