[英]Tridion: Dreamweaver doesn't resolves the HTML code field
我們有一個復合CT,它輸出其中一個組件的代碼字段。
CT的夢想編織部分如下:
<!-- TemplateBeginRepeat name="Component.HTMLCode" -->
@@Component.HTMLCode@@
<!-- TemplateEndRepeat -->
但是,此CT在頁面上顯示代碼字段,而不是轉換為HTML。
例如:如果代碼字段的值為 - > <div align="center" id="loginapp"></div>
那么在頁面上顯示相同的值而不是解析。
在頁面源代碼中,輸出為“ &lt; div align =&quot; center”id =&quot; loginapp&quot;&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(""", """);
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中執行此操作,但可以從DWT模板直接調用Dreamweaver自定義函數。 無論哪種方式,我認為你確實需要自己做一些編碼。
RenderComponentField有兩個參數:bool htmlEncodeResult和bool resolveHtmlAsRTFContent。 你在使用這個內置功能嗎?
謝謝你的幫助。 經過使用Dreamweaver代碼的大量試驗后,我們決定使用C#TBB來解決目的。
將多行字段作為文本字段讀取也是我們犯下的錯誤之一。 這導致字段值顯示在頁面上而不是作為后面的代碼呈現。
我們終於使用“MultilineTextField”解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.