我们有一个复合CT,它输出其中一个组件的代码字段。
CT的dream weaver部分如下:
<!-- TemplateBeginRepeat name="Component.HTMLCode" -->
@@Component.HTMLCode@@
<!-- TemplateEndRepeat -->
但是,此CT在页面上显示代码字段,而不是转换为HTML。
例如:如果代码字段的值为-><div align="center" id="loginapp"></div>
然后,这个相同的值显示在页面上,而不是解析。
在页面源中,我们得到的输出为"<div align=";center"id=&loginapp>;<;/div>"
我知道如果我们使用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(""", """);
strOutput.Replace(" ", " ");
strOutput.Replace("&", "&");
strOutput.Replace("'", "'");
strOutput.Replace("<", "<");
strOutput.Replace(">", ">");
strOutput.Replace("¡", "¡");
strOutput.Replace("¢", "¢");
strOutput.Replace("£", "£");
strOutput.Replace("¤", "¤");
strOutput.Replace("¥", "¥");
strOutput.Replace("¦", "¦");
strOutput.Replace("§", "§");
strOutput.Replace("¨", "¨");
strOutput.Replace("©", "©");
strOutput.Replace("ª", "ª");
strOutput.Replace("¬", "¬");
strOutput.Replace("­", "­");
strOutput.Replace("®", "®");
strOutput.Replace("¯", "¯");
strOutput.Replace("°", "°");
return strOutput.ToString();
}
}
如果我记得正确的话,这取决于您的字段类型,如果在Schema中使用普通文本字段,那么HTML将被转义,如果使用富文本字段,它将被解析。
一种选择可能是编写一个Dreamweaver自定义函数,该函数允许您取消对字段的映射(将其表示为HTML字段而不是文本字段)。正如您所提到的,您也可以在TBB中执行此操作,但Dreamweaver自定义函数可以直接从DWT模板中调用。不管怎样,我认为你确实需要自己做一些编码。
感谢您的帮助。在对dreamweaver代码进行了大量的试用后,我们决定使用C#TBB,这解决了这个问题。
另外,将多行字段读取为文本字段也是我们犯下的错误之一。这导致字段值显示在页面上,而不是显示为代码隐藏。
我们最终使用"MultilineTextField"解决了这个问题。