1

Tridion 5.3 から Tridion 2011 SP1 にアップグレードしました。

Tridion 5.3 では VBScript テンプレートを使用していましたが、このアップグレードの一環として、既存の VBScript テンプレートを複合コンポーネント テンプレートに変換しています。RTF フィールドの内容に関して、以下の 2 つの問題に直面しています。

問題 1: RTF フィールドの既存のコンテンツには、空のタグ/HTML タグが多数の場所にあります。例えば。<a name="Contact" id="Contact"></a> 複合コンポーネント テンプレート (Tridion 2011 SP1 環境) を使用してコンテンツを公開すると、上記のアンカー タグが に変換され<a name="Contact" id="Contact" />ます。これは、既存の JavaScript 機能を壊しています。この問題を克服するために、空のタグを見つけて内部テキストを次&nbsp;のよう<a name="Contact" id="Contact">&nbsp;</a>に置き換える C# 関数を作成しました。しかし、RTF フィールドごとに CT レベルでこの関数を呼び出すことは、多数のコンポーネント テンプレートがあるため、大きな作業になります。それを行うより良い方法はありますか?

問題 2 : 同じ RTF フィールドに次のようなコンテンツが&#160;あるため (編集者が Web またはどこかからコピーして貼り付けた可能性があります)、ページまたはコンポーネントを公開しようとすると、エラーで失敗します。JScriptException:Expression valueUnterminated 文字列定数。

問題の修正に役立つデフォルトの TBB はありますか?

4

2 に答える 2

2

問題 1:

フィルタリング XSLTを使用して、コンポーネントの保存時に RTF コンテンツを変更することもできます。

このようにして、空のタグ<tag></tag><tag>&nbsp;</tag>コンポーネントの保存時に置き換えることができ、テンプレートをさらに変更する必要はありません。

問題 2:

&#160;エンコードされた のようです。&nbsp;文字コードを参照してください: http://www.escapecodes.info/

フィルタリング xslt または C# TBB を使用して、この文字コードを適切な html エンコーディングに置き換えることができるかもしれません。

于 2012-11-02T08:49:55.937 に答える
0

インラインの閉じたアンカー タグを改行なしスペースを含むアンカー タグに変換する関数が既にあるため、すべてのコンポーネント テンプレートで使用する代わりに、ページ テンプレートからこの関数を使用することを検討できます。これにより、変更に必要なテンプレートの数がはるかに少なくなります...

また、実際に余分なスペースを挿入せずに、インラインの閉じたアンカー タグを適切に閉じたアンカー タグに置き換えることを検討することもできます。

以下は、インラインの閉じたアンカー タグを置き換えるために TBB で使用できる C# フラグメントです。

Item outputItem = package.GetByName(pcakge.OutputName);
package.Remove(outputItem);
string outputString = Regex.Replace(outputItem.GetAsString(), "(<a[^>]*?)/>", "$1></a>", RegexOptions.Singleline);
outputItem.SetAsString(outputString);
package.PushItem(Package.OutputName, outputItem);

これを拡張して   を置き換えることもできます。  付き しかし、これにより   などの問題が発生することはありません。は HTML で有効なエスケープ シーケンスです (Tridion RTF フィールドは基本的に XML であり、  の代わりに   が表示される可能性があります)。

于 2012-11-22T10:09:52.477 に答える