複数のコミュニティ、テーマ、およびレイアウトテンプレートからなるLiferay 5.2インスタンスに複数のサイトがホストされています。ただし、このセットアップは、5.2のEEサービスパック(具体的には最新のEE SP5 - 5.2.9と同じ)または最新の6.0.6(CE)では動作しなくなりました。 (追加テストでは、これがEE SP3/5.2.7で最後に動作していましたが、EE SP4/5.2.8では問題となりました)。 Liferay 6にアップグレードすることも可能ですが、それが機能するソリューションとバージョンの組み合わせを見つけることができます。5.2 EE SP5または6.xのLiferayレイアウトテンプレート(テーマではない)にポートレットを埋め込む
特に、テーマの一部として含まれ、レイアウトテンプレートに含まれるテーマのファイル(例:inc-side.vm
)があります。これにより、複数のサイト(コミュニティ/テーマ)にわたって同じレイアウトテンプレートが使用されていても、コンテンツがテーマによって「所有」されていても、さまざまなレイアウトテンプレートのコンテキストで使用されます。レイアウトのUI空間内に配置する必要があるため、このコンテンツをテーマに直接配置する(レイアウトテンプレートを使用せずに)ことはできません。さまざまなレイアウトでは、このコンテンツがテーマ。
さらに、この組み込みコンテンツは「埋め込み」ポートレット(I.E.)で構成する必要があり、ページごとのUIにドラッグアンドドロップされず、各テーマ/レイアウトに関連付けられている必要があります。テーマ+レイアウトをサイト/ページに適用するだけで、正しいポートレットが各ページに自動的に組み込まれます。これは約100ページ以上のサイト/コミュニティのいくつかと同じように必要であり、このコンテンツをページに追加し、テーマ+レイアウトに埋め込まれずに一貫性を保つことは実用的でも保守的でもありません。
また、これは5.2.3(5.2 EE SP1、SP2、およびSP3を含む)で動作していたことになります(10のテーマ(コミュニティ)* 10レイアウトテンプレート* 10ページ/コミュニティ= ) - 5.2 EE SP4の時点では動作を停止しました。私たちはLiferayエンタープライズサポートのお客様で、サポートチケットはまだ2ヶ月間オープンしていますが、これはまだ解決されていません。リリースノートでこれに関する何も言及されていませんでしたが、なぜLiferayがこの変更の理由、または成功した回避策についての案内を得ることができませんでした。
簡単かつ一貫して再現5.2 EEのSP4またはSP5の任意の新規インストールの下で:ここで
は、現在の問題のいくつかの詳細です。
inc-side.vm
をテーマのtemplates
ディレクトリに含めます。テーマには特別なものは何もありません.Liferayのデフォルトの「クラシック」テーマのコピーを使用しても機能します。 inc-side.vm
で
、次のものがあります。
<p>Before Diagnostics</p>
$theme.runtime("27_INSTANCE_0000", "", $velocityPortletPreferences.toString())
$velocityPortletPreferences.reset()
<p>After Diagnostics</p>
注「27」は簡単にするために使用されるデフォルトのLiferayが提供するポートレットであり、そしてこの問題は、任意のカスタム開発のポートレットに特定のではないことを実証すること。しかし、まったく同じ問題を示す独自の「診断ポートレット」も作成しました。
#set ($contextName = $themeDisplay.getTheme().getContextPath())
#set ($themeContext = $request.getAttribute("CTX").getContext($contextName))
#evaluate ($theme.include($themeContext, "/templates/inc-side.vm"))
これはhttp://www.liferay.com/community/forums/-/message_boards/message/772138に示されたのと同じアプローチを次のレイアウトテンプレート(* .TPL)において
は、次の行を含みます。
#parse ("$fullTemplatesPath/inc-side.vm")
は($fullTemplatesPath
対$full_templates_path
に注意してください。この理由は、そのinit.vm
通話#set ($full_templates_path = $fullTemplatesPath)
です - :弊社のサポートチケットからの提案パー
init.vm
はテンプレートに含まれておらず、テーマのみです)。 どちらの方法の結果も同じです。 inc-side.vm
に含まれる静的テキスト/ HTMLは、期待どおりに表示されます。 Velocityディレクティブは解析され、処理され、出力には表示されません。ポートレット内のロギングは、実行したことを示し、velocityPortletPreferences
に設定されたポートレットプリファレンスも取得します。 根本的な問題は、ポートレットによって生成されたコンテンツがHTTP応答にレンダリングされないということです。実際に、Firefoxの「表示/ソース」またはcURLので見られるように、応答が正確に含まれています。私のカスタム・ポートレットで
<p>Before Diagnostics</p>
<p>After Diagnostics</p>
、私も考えて、私は応答に見つけることができるすべてのflush()
とclose()
メソッドを呼び出してみましたそれはフラッシュ関連の問題でした。
代わりにLiferay 6.0.6でテストしてみてください(おそらくこれは5.2シリーズの問題であったとします)。付属の* .vmファイルがページに正常に読み込まれます。しかし、Velocityコードとして評価されていません。含まれているVMが実行されているがレンダリングされていない5.2 SP5とは異なり、6.0.6はレンダリングされていますが評価(または実行)されていません。
http://www.liferay.com/web/raymond.auge/blog/-/blogs/11180056(「Liferayのテーマにポートレットを埋め込む」)を確認しました。上記のアプローチは実際には「方法1」です。 を使用すると、ページのDOM(特にJavaScript IPC)に問題が発生するため、「方法2」は受け入れ可能なオプションではありません。また、各ポートレットのUIサイズも事前に知る必要があります。実用的でないか、または容認できない。
私たちは、Liferayのおよび/または(のLiferayで使用される)はApache Velocityテンプレートエンジンをより身近な誰かがこの問題の解決や他の許容可能な回避策を提供できることを期待しています。私は可能な限りの詳細や説明を追加します。
ありがとうございます!
私はあなたのサポートチケットを見つけました。それは現在かなり活発に見えます - これは明日もう一度見ていきます(私はヨーロッパにいる、深い夜です - このような問題のための正しい設定ではありません)しかし、今のところ、いくつかの回帰バグが見つかったようです。 –
ありがとうオラフ - 私はちょうどパッチが利用可能であることも通知を受けて、私は24時間以内にそれをテストするでしょう。これを解決する手助けがあれば、それを回答として投稿してください(または、Liferayに関係する適切な人にそのアカウントとして投稿させてください)。問題が解決したことを確認したらうれしく賞金を授与します。 – ziesemer