5.2 EE SP5または6.xのLiferayレイアウトテンプレート(テーマではない)にポートレットを埋め込む

我々は、複数のコミュニティ、テーマ、およびレイアウトテンプレートからなる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にアップグレードすることも可能ですが、それが機能するソリューションとバージョンの組み合わせを見つけることができます。

特に、テーマの一部として含まれ、レイアウトテンプレートに含まれるテーマ(例: inc-side.vm )内のファイルがあります。これにより、複数のサイト(コミュニティ/テーマ)にわたって同じレイアウトテンプレートが使用されていても、コンテンツがテーマによって「所有」されていても、さまざまなレイアウトテンプレートのコンテキストで使用されます。レイアウトのUI空間内に配置する必要があるため、このコンテンツをテーマに直接配置する(レイアウトテンプレートを使用せずに)ことはできません。さまざまなレイアウトでは、このコンテンツがテーマ。

追加の要件は、このコンテンツが「埋め込み」ポートレット(I.E.)で構成されていて、ページごとのUIにドラッグアンドドロップされず、各テーマ/レイアウトに関連付けられていることです。テーマ+レイアウトをサイト/ページに適用するだけで、正しいポートレットが各ページに自動的に組み込まれます。これは約100ページ以上のサイト/コミュニティのいくつかと同じように必要であり、このコンテンツをページに追加し、テーマ+レイアウトに埋め込まれずに一貫性を保つことは実用的でも保守的でもありません。 (10のテーマ(コミュニティ)* 10のレイアウトテンプレート* 10ページ/コミュニティ= 1000の組み合わせを考慮して設定と管理を行う)

ここでも、これは5.2.3(5.2 EE SP1、SP2、およびSP3を含む)ではすべて動作していましたが、5.2 EE SP4では動作しなくなりました。私たちはLiferayエンタープライズサポートのお客様で、サポートチケットはまだ2ヶ月間オープンしていますが、これはまだ解決されていません。リリースノートでこれに関する何も言及されていませんでしたが、なぜLiferayがこの変更の理由、または成功した回避策についての案内を得ることができませんでした。

現在の問題の詳細は次のとおりです。

5.2 EE SP4またはSP5の新規インストールで簡単かつ一貫して再現可能

テーマの templates ディレクトリの下に inc-side.vm を含めます。テーマには特別なものは何もありません.Liferayのデフォルトの「クラシック」テーマのコピーを使用しても機能します。

inc-side.vm には、次を含めてください:

Before Diagnostics

$theme.runtime("27_INSTANCE_0000", "", $velocityPortletPreferences.toString()) $velocityPortletPreferences.reset()

After Diagnostics

「27」はデフォルトのLiferay提供ポートレットであり、簡単にするために使用し、この問題がカスタム開発ポートレットに特有ではないことを実証することに注意してください。しかし、まったく同じ問題を示す独自の「診断ポートレット」も作成しました。

レイアウトテンプレート(* .tpl)に、次の行を含めます。

#set ($contextName = $themeDisplay.getTheme().getContextPath())
#set ($themeContext = $request.getAttribute("CTX").getContext($contextName))
#evaluate ($theme.include($themeContext, "/templates/inc-side.vm"))

これは、 http://www.liferay.com/で示されているのと同じアプローチに従います。コミュニティ/フォーラム/ - /message_boards/message/772138

私のサポートチケットからの提案に基づき、私は上記の行の代わりに次の1行を試しました:

#parse ("$fullTemplatesPath/inc-side.vm")

この理由は、 init.vm #set($ full_templates_path = $)を呼び出しているためです(注: $ fullTemplatesPath fullTemplatesPath) - ただし、 init.vm はテーマにのみ含まれています)。

どちらのアプローチの結果も同じです。 inc-side.vm に含まれる静的テキスト/ HTMLは、期待どおりに表示されます。 Velocityディレクティブは解析され、処理され、出力には表示されません。ポートレット内でのロギングは、 velocityPortletPreferences に設定されたポートレットプリファレンスを実行し、検索することさえ示しています。 根本的な問題は、ポートレットで生成されたコンテンツがHTTPレスポンスにレンダリングされないことです。実際、Firefoxの「View/Source」またはcURLで表示されるレスポンスには、

Before Diagnostics

After Diagnostics

私のカスタムポートレットでは、フラッシング関連の問題だと考えて、応答で見つけられるすべての flush()メソッドと close()メソッドを呼び出すことも試みました。

代わりにLiferay 6.0.6でのテスト(おそらくこれは5.2シリーズの問題であったと仮定します)では、まだ異なるが興味深い結果が得られます。付属の* .vmファイルがページに正常に読み込まれます。しかし、Velocityコードとして評価されていません。含まれているVMが実行されているがレンダリングされていない5.2 SP5とは異なり、6.0.6はレンダリングされていますが評価(または実行)されていません。

We have reviewed http://www.liferay.com/web/raymond.auge/blog/-/blogs/11180056 ("Embedding portlets in themes on Liferay"), and the above approach is really "method one". "Method two" is not an acceptable option, as the use of an <iframe> causes issues with the DOM of the page (specifically with JavaScript IPC) - and this would also require the UI size of each portlet to be known in-advance, which isn't practical or acceptable.


LiferayやApache Velocityのテンプレートエンジン(Liferayで使用されている)に精通した方が、この問題に対して解決策やその他の許容可能な回避策を提供できることを期待しています。私は可能な限りの詳細や説明を追加します。

ありがとう!

4
私はあなたのサポートチケットを見つけました、そして、それは現在かなり活発に見えます - それはかなり長いので、私はこの明日をもう一度見ていきます(私はヨーロッパにいる、深い夜です - この種の問題の正しい設定ではありません)。今、回帰バグが見つかったようです。
追加された 著者 Olaf Kock,
ありがとうオラフ - 私はちょうどパッチが利用可能であることも通知を受けて、私は24時間以内にそれをテストするでしょう。これを解決する手助けがあれば、それを回答として投稿してください(または、Liferayに関係する適切な人にそのアカウントとして投稿させてください)。問題が解決したことを確認したらうれしく賞金を授与します。
追加された 著者 ziesemer,

1 答え

この問題は、Liferayパッチ lpe5096-ee5209-portal-kernel-jdk6.jar によって解決されます。私が効果的に使っているのは、2011-12-29にLiferayによって提供され、 adb6e0590bfc4850c127a792515941d6de5d385e のSHA-1チェックサムがあります。

1
追加された
それが解決されたことを知りました - 私は休暇のシーズンにこれを見失いましたが、サポートチケットの進歩を見たので、それがうまく進んでいたときに返信しませんでした。ああ、そして:私はここにあなたの問題を見つける以外に直接これに関与していませんでした。
追加された 著者 Olaf Kock,