Tuesday, March 31, 2020

Liferay DXP 7.1 言語リソースカスタマイズの共有

こんにちは、うです。

前回、Liferay DXP 7でのカスタイムモジュール(ポートレット)の言語リソースを他モジュールに共有する方法を紹介しました。今回は、Liferay DXP 7.1以降、既存モジュール言語リソースに対するカスタマイズを複数既存モジュールに適用する方法を紹介します。

みなさまはすでにご存知かもしれませんが、Liferay DXP 7.1から、モジュール言語リソースのカスタマイズ方式は従来のOSGI-Service方式からOSGI-Capability方式になりました。従って、bnd-tools Provide-Capabilityのみで、複数モジュールが同じ言語リソースカスタマイズを利用できます。

公式例:
Provide-Capability:\
  liferay.resource.bundle;\
    resource.bundle.base.name="content.Language",\
  liferay.resource.bundle;\
    resource.bundle.aggregate:String="(bundle.symbolic.name=com.liferay.docs.l10n.myapp.lang),\
      (bundle.symbolic.name=com.liferay.blogs.web)";\
    bundle.symbolic.name=com.liferay.blogs.web;\
    resource.bundle.base.name="content.Language";\
    service.ranking:Long="2";\
    servlet.context.name=blogs-web

複数カスタマイズ共有(例として、blogs-webproduct-navigbation-control-menu-webを対象にする)例。

Provide-Capability:\
  liferay.resource.bundle;\
    resource.bundle.base.name="content.Language",\
  liferay.resource.bundle;\
    resource.bundle.aggregate:String="(bundle.symbolic.name=com.liferay.docs.l10n.myapp.lang),\
      (bundle.symbolic.name=com.liferay.blogs.web)";\
    bundle.symbolic.name=com.liferay.blogs.web;\
    resource.bundle.base.name="content.Language";\
    service.ranking:Long="2";\
    servlet.context.name=blogs-web
  liferay.resource.bundle;\
    resource.bundle.aggregate:String="(bundle.symbolic.name=com.liferay.docs.l10n.myapp.lang),\
      (bundle.symbolic.name=com.liferay.product.navigation.control.menu.web)";\
    bundle.symbolic.name=com.liferay.product.navigation.control.menu.web;\
    resource.bundle.base.name="content.Language";\
    service.ranking:Long="2";\
    servlet.context.name=product-navigation-control-menu-web

まとめると、Liferay DXP 7.1にでの言語リソース定義は、以下のルールに従いましょう。

  •  bnd.bndProvide-Capabilityを追加する
  •  Provide-Capabilityに以下のディレクティブを追加する
    1. liferay.resource.bundle;resource.bundle.base.name=...: 言語キー所在パッケージパスを定義する
    2. liferay.resource.bundle;resource.bundle.aggregate...: カスタム対象モジュールを宣言する
    3. 複数の対象モジュールがある場合、上記2のディレクテイブを複数記入する
    4. 全てディレクテイブはコンマ,で区切る

Alfresco Community Edition 201911GAをDocker Composeでデプロイする

こんにちは。てらしたです。前回投稿したのがいつだったのか思い出せないくらい久しぶりですが、これからまた少しずつ書いていけたらと思っています。

今回は、Alfresco Community EditionをDocker Composeを使用してデプロイする方法をご紹介します。Alfrescoがどういうものなのかちょっと使って評価してみたいという場合には、とても簡単にできるのでおすすめです(ただし、本番で使う場合にはDocker Composeは推奨されていません)。
使用するバージョンは現時点(2020年3月)での最新のGA版であるAlfresco Community Edition 201911 GAです。リリースノートはこちら。AlfrescoやShareの6.2.0が含まれています。
手順については以前ニコラが紹介したこちらの内容からほとんど変わっていませんが、Alfresco Platformにもポート8080でアクセスできる点等、ちょっとした違いがあります。
また、基本的には公式ドキュメント(https://docs.alfresco.com/community/tasks/deploy-docker-compose.html)の手順どおりですが、URLにバージョンが含まれていないことからもわかるように、Community版のドキュメントはその時点の最新版のGAのものしか公開されていないようです(私が見つけられないだけかもしれませんが...)。そのため、上記の公式ドキュメントは現時点では201911GAの内容が書かれていますが、新しいバージョンがリリースされたら更新されて下記でご紹介する手順から変わってしまう可能性があります。下記の内容は201911GAのデプロイ方法である点にご注意ください。

まず準備として、手元の環境に合わせてDockerとDocker Composeをインストールしておいてください。

次に、GitHubのプロジェクトをcloneして、201911GAに対応するタグ(3.0.1)をチェックアウトします。
git clone https://github.com/Alfresco/acs-community-deployment.git
cd acs-community-deployment
git checkout 3.0.1
あとは、Docker Composeを使用して起動するだけです。この時、ポート5432、8080、8083が空いている(使われていない)ことをあらかじめ確認しておいてください。
cd docker-compose
docker-compose up
特にエラーが出ることもなく以下のようなログが表示されたら無事に起動しているはずです(起動できない場合については後述)。
alfresco_1               | 17-Mar-2020 01:56:09.395 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 97601 ms

正常に起動しているかどうかはAlfresco Shareに以下のURLでアクセスして、adminでログインできるかどうかでも確認できます(adminの初期パスワードはadminです)。

http://localhost:8080/share

また、Alfresco PlatformやSolrには以下のURLでアクセスできます。

http://localhost:8080/alfresco
http://localhost:8083/solr

正常に起動できない場合は、Dockerに割り当てているメモリが不足している可能性があります(私も一度それで失敗しました)。Dockerの設定で最低でも6GBのメモリを割り当てた上で改めて試してみてください。

Tuesday, March 17, 2020

Liferay DXP 7でツールチップとヘルプアイコンを実装する

こんにちは。おおたにです。

今回はツールチップとヘルプアイコンの実装方法について紹介します。
ツールチップと言えば、以下のようなやつですね。ちょっとした説明をポップアップ表示させられるのでなかなか便利です。


Liferayでは、ヘルプアイコンとセットになったツールチップ(上の画像のやつ)の部品が用意されているほか、任意のHTML要素へのツールチップ追加も簡単にできます。それぞれについて見ていきましょう。

ヘルプアイコン


ヘルプアイコンの表示にはliferay-ui:icon-helpというタグを使います。例えばこんな感じに書くだけで、

<p>help icon 2<liferay-ui:icon-help message="msg.tooltip.help-icon"/></p>

以下のようなヘルプアイコン&ツールチップが実装できます。messageに言語キーを指定すると多言語化もできます。超簡単!


Liferay Development Tutorialsに詳しい説明が載っていますのでご参照ください。

任意のHTML要素へのツールチップ追加


HTML要素のclass属性にlfr-portal-tooltipを追加し、data-title属性にツールチップの文言を指定するだけで、任意のHTML要素にツールチップを追加できます。例えば、

<p class="lfr-portal-tooltip" data-title="tooltip for html element">html element 1</p>

と書くだけで、以下のようなツールチップが表示されるようになります。こちらも簡単!


こちらを多言語化する場合は、JSP式(JSP expression)等を使ってdata-title属性に多言語化された文字列を指定する必要があります。

data-title="<%=LanguageUtil.get(request, "msg.tooltip.html-element") %>"

今回は以上になります。是非みなさんもツールチップを使ってみてください!

Tuesday, March 3, 2020

Liferay DXP 7でカスタムモジュールの言語リソースを共有する

こんにちは。おおたにです。 

突然ですが、Liferay DXP 7のカスタマイズを進める中で、「前に作ったモジュールの言語リソースをこちらでも使いたいな」とか「言語リソースの定義が複数のモジュールに散らばっていて管理しずらいな」と感じたことはありませんでしょうか?
今回は、上記のようなシチュエーションで役立つ、カスタムモジュールの言語リソースを共有するための方法を紹介します。

方法はとてもシンプルで、モジュールのbnd.bndに以下の内容を追記すると、他のモジュールで定義された言語リソースを参照できるというものです。
-liferay-aggregate-resource-bundles: \
    <参照したい言語リソースを持つモジュールのSymbolicName>

例えば、言語リソース一元管理用のモジュールを用意して各モジュールから参照させることで、言語リソースの管理コストや言語リソース更新し忘れによる表記揺れのリスクを低減することができます。
詳しくはこちらのドキュメントこちらのドキュメントをご参照ください。Liferay社が提供するサンプルも参考になりますので是非一度確認してみてください。