LoginSignup
3
1

More than 3 years have passed since last update.

Liferay 7.1のアセットパブリッシャー用アプリケーション・ディスプレイ・テンプレート(ADT)サンプル

Last updated at Posted at 2019-01-30

この記事は、Liferay 6.2のアセットパブリッシャー用アプリケーション・ディスプレイ・テンプレート(ADT)サンプル から、7.1以降での差分を説明します。ADTやWebコンテンツでのテンプレート使用方法に関しては

を参照ください。

組み込みサービスの取得方法

Liferay 7.1から大きく変わったのはテンプレート周りで利用できる変数の権限管理です。以前はportal-ext.propertiesで設定していたのですが、7.1からシステム設定画面から設定するようになりました。

コントロールパネル -> 設定 -> システム設定 -> テンプレートエンジン -> FreeMarkerエンジンページへ行き、
で、リストにあるserviceLocatorstaticUtilを、制限付き変数のリストから削除してください。ユーザーがテンプレートを利用する際にこれらのオブジェクトのアクセス権限を渡すことはセキュリティのリスクにもなるので、テンプレートの編集権限は本当に必要なユーザーのみに公開するように、権限設定や運用を今一度確認、検討してください。

GUIからの設定以外にも、

com.liferay.portal.template.freemarker.configuration.FreeMarkerEngineConfiguration.cfg

という名前のファイルを

$LIFERAY_HOME/osgi/configs

に配置することで、同様の設定を行うこともできます。またGUIの設定をエクスポートすると、同様の設定が上記の場所に出力されます。例として中身を

restrictedVariables=

のように設定すると、全てのテンプレート内部で使用可能オブジェクトにアクセスできるようになります。これら値のデフォルトは

com.liferay.portal.template.freemarker.configuration.FreeMarkerEngineConfiguration

を参照してください。

画像データの表示方法

たとえば、Webコンテンツでddm-imageで、ドキュメントメディアのデータを取得するフィールドがあり、この記事で説明している自作関数で、blog_catch変数に、ddm-image内部に保存されているjsonデータを読み込んできているとします。

その場合、以下のような方法でドキュメントとメディア内に保存してあるアセットデータへのパスが取得できます。

<#assign
    serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()
    themeDisplay = serviceContext.getThemeDisplay()
    dlAppLocalServiceUtil = staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
    dlUtil = staticUtil["com.liferay.document.library.kernel.util.DLUtil"]  
    blog_catch = blog_catch?eval
    uuid = blog_catch.uuid
    groupId = blog_catch.groupId 
    dlFile = dlAppLocalServiceUtil.getFileEntryByUuidAndGroupId(uuid,groupId?number)
    imgUrl =  dlUtil.getPreviewURL(dlFile, dlFile.getFileVersion(),themeDisplay,'')
>
<a href="${imgUrl}">image url</a>

気をつけるのは

blog_catch = blog_catch?eval

の部分で、Freemarkerテンプレート言語で、jsonを読み込んできた場合、evalメソッドで読み込むことでjsonオブジェクトとしてアクセスできるようになります。また、数値は

groupId?number

のように、numberメソッドをコールする必要があります。

編集リンクを、編集権限があるユーザーにのみ表示したい

以下のように、editURL を生成し、FreemarkerだとTaglibが利用できるので、icon用タグリブを利用すると、以下のようにダイアログ表示での編集画面を組み込めます。entryはADTにデフォルトで入っている (<#list entries as entry>のような感じで)ので、そのまま使えるはずです。その他に呼び出しているライブラリも、システム設定からFreemarker Templateのクラスコール制限を取り払ってしまえば、デフォルトでコールできます。

<#assign
    portletId = themeDisplay.getPortletDisplay().getId()
    plid = getterUtil.getLong(themeDisplay.getPlid())
    portletURL = portletURLFactory.create(renderRequest, portletId, plid, "RENDER_PHASE")
    windowState = windowStateFactory.getWindowState("POP_UP")
    assetRenderer = entry.getAssetRenderer()
    editURL = assetRenderer.getURLEdit(renderRequest,renderResponse, windowState, currentPortletURL)
    VOID = editURL.setParameter("hideDefaultSuccessMessage", "true")
    VOID = editURL.setParameter("returnToFullPageURL", currentPortletURL)
>
<#if editURL?has_content && assetRenderer.hasEditPermission(permissionChecker)>
  <@liferay_ui["icon"] method="get" url="${editURL}" icon="pencil" useDialog=false />
</#if>
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1