2016-07-21 11 views
4

マグノリアのリッチテキストを直接フロントエンドに出力することを検討しています。私は以下のようにフィールドを定義しています:マグノリア豊富なテキストフィールド

@TabFactory("Content") 
public void contentTab(UiConfig cfg, TabBuilder tab) { 
    tab.fields(
      cfg.fields.text("title").label("Title"), 
      cfg.fields.richText("subtitle").label("Subtitle") 
    ); 
} 

テンプレート内では、情報はJCRに保存されている場合、HTMLエンティティとデータをエンコードするために表示されます。

Title: ${content.title} 
Subtitle: ${content.subtitle} 

出力(生源)。 ..

Title: The Title Field 
Subtitle: <p>The Subtitle Field</p> 

しかし、出力すべき(生源)...

Title: The Title Field 
Subtitle: <p>The Subtitle Field</p> 

リッチテキストフィールドが自動的にエンコードされないようにする方法はありますか?

答えて

1

デコード機能が動作します。 https://documentation.magnolia-cms.com/display/DOCS/cmsfn#cmsfn-DecodeHTML

[#if content.text?has_content] 
    ${cmsfn.decode(content).text} 
[/#if] 
+0

明らかに、それはうまくいくが、それは最初の場所でエンコーディングを停止していない。 – Ducaz035

+0

ええ、私はより良いアプローチを見つけたいと思っています – bashaus

+0

これは標準的なマグノリアのhtmlを出力する方法です。 –

0

ほとんどのフレームワークは、以下のように、テンプレートを使用するには良い方法であるので、攻撃のXSS -kindを取り除くしよう:

Title: ${content.title} 
Subtitle: <p>${content.subtitle}</p> 

それは魔法を実行するために、ユーザー(または管理者)を防ぐことができますJSまたはクライアント上の他の悪いコード

質問に戻る:ここでドキュメントhttps://documentation.magnolia-cms.com/display/DOCS/Component+definitionをチェックしてください。 escapeHtmlと呼ばれるものがあります。 :)

編集:指摘bashausとして、彼はページのプロパティではないコンポーネントを使用していました。以下、このように解決策:

[#if content.text?has_content] 
    ${cmsfn.decode(content).text} 
[/#if] 

TL.DRは:動的コンテンツのHTML文字を避けるようにしてくださいますが、機能はオフにすることが可能です。

+0

感謝を - しかし、私はこの特定の項目のためのページのプロパティを使用しています、コンポーネントを使用していませんよ。プロパティのためにそれを行う方法に関するアイデア(上記のタブ項目を使用) – bashaus

関連する問題