4

コンポーネントの 1 つのコード フィールドを出力する複合 CT があります。

CT のドリーム ウィーバー部分は次のとおりです。

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

ただし、この CT は、HTML に変換する代わりに、コード フィールドをページに表示します。

例: コード フィールドの値が -> の場合、 <div align="center" id="loginapp"></div> この同じ値が解析の代わりにページに表示されます。

ページ ソースでは、" < ;div align=" ;center" id=" ;loginapp" ;> ;< ;/div> ;"として出力されます。

これは C# を使えば解決できると思います。しかし、dreamweaver を使用して特殊文字の変換を停止する方法はありますか?

4

4 に答える 4

6

サーバーにコードを公開するには、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();    
    }


}
于 2012-09-11T13:04:09.433 に答える
4

私の記憶が正しければ、それはフィールド タイプに依存します。スキーマで通常のテキスト フィールドを使用している場合、HTML はエスケープされます。リッチ テキスト フィールドを使用している場合は、解決されます。

おそらく、フィールドをアンエスケープできる Dreamweaver カスタム関数を作成するオプションがあります (テキスト フィールドではなく HTML フィールドとして表します)。あなたが言及したように、TBB でも実行できますが、Dreamweaver カスタム関数は DWT テンプレートから直接呼び出すことができます。いずれにせよ、自分でコーディングを行う必要があると思います。

于 2012-09-11T10:14:05.230 に答える
2

RenderComponentField には、bool htmlEncodeResult と bool resolveHtmlAsRTFContent の 2 つのパラメーターがあります。この組み込み関数を使用していますか?

于 2012-09-11T10:59:00.023 に答える
1

ご協力いただきありがとうございます。dreamweaverコードで多くの試行を行った後、目的を解決する代わりにC#TBBを使用することにしました。

また、複数行フィールドをテキストフィールドとして読み取ることは、私たちが犯した間違いの1つでした。これにより、フィールド値がコードビハインドとしてレンダリングされるのではなく、ページに表示されました。

「MultilineTextField」を使用して、最終的に問題を解決しました。

于 2012-09-12T14:44:48.243 に答える