簡體   English   中英

Tridion:Dreamweaver無法解析HTML代碼字段

[英]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("&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中執行此操作,但可以從DWT模板直接調用Dreamweaver自定義函數。 無論哪種方式,我認為你確實需要自己做一些編碼。

RenderComponentField有兩個參數:bool htmlEncodeResult和bool resolveHtmlAsRTFContent。 你在使用這個內置功能嗎?

謝謝你的幫助。 經過使用Dreamweaver代碼的大量試驗后,我們決定使用C#TBB來解決目的。

將多行字段作為文本字段讀取也是我們犯下的錯誤之一。 這導致字段值顯示在頁面上而不是作為后面的代碼呈現。

我們終於使用“MultilineTextField”解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM