Как правильно отобразить поля "Ссылка на страницу" в динамических списках данных Liferay?
Контекст
Я пытаюсь создать портлет списка ссылок на странице в моем экземпляре Liferay 6.2. Чтобы добиться этого, я разместил на странице новый портлет отображения динамического списка данных и создал поле "Определение данных", содержащее ссылку на страницу (раньше ее называли "Ссылка на макет до 6.2"). Я пытаюсь создать собственный шаблон отображения, используя руководство Liferay, чтобы отобразить неупорядоченный список HTML со ссылками, но я не могу найти какую-либо информацию о том, как правильно обрабатывать поле "Ссылка на страницу".
Вопрос
Как создать шаблон Freemarker, который отображает поле "Ссылка на страницу", чтобы атрибут href содержал умный URL-адрес страницы, а текст ссылки - это локализованное имя страницы?
1 ответ
Редактор шаблонов отображения добавляет следующий код в скрипт Freemarker, когда вы щелкаете по полю:
<a href="${ddmUtil.getDisplayFieldValue(themeDisplay, cur_record.getFieldValue("Link_to_Page1632", locale), cur_record.getFieldType("Link_to_Page1632"))}">
Link to Page
</a>
Это хороший совет, чтобы начать отображать ссылки, просто добавьте небольшие детали:
<#-- The record service to retrieve the list of records in this Dynamic Data List -->
<#assign DDLRecordLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService")>
<#-- The layout service that helps determine the name of the page -->
<#assign layoutService = serviceLocator.findService("com.liferay.portal.service.LayoutService")>
<#-- Get the records in the Dynamic Data List -->
<#assign records = DDLRecordLocalService.getRecords(reserved_record_set_id)>
<ul>
<#if records?has_content>
<#list records as cur_record>
<li>
<#-- Use the snippet provided by the editor -->
<a href="${ddmUtil.getDisplayFieldValue(themeDisplay, cur_record.getFieldValue("Link_to_Page1632", locale), cur_record.getFieldType("Link_to_Page1632"))}">
<#-- Get the name of the page with layoutService.getLayoutName() using a temporary JSON object -->
<#assign jsonObj = jsonFactoryUtil.createJSONObject(cur_record.getFieldValue("Link_to_Page1632"))>
${layoutService.getLayoutName(jsonObj.getLong("groupId"), jsonObj.getBoolean("privateLayout"), jsonObj.getLong("layoutId"), localeUtil.toLanguageId(locale))}
</a>
</li>
</#list>
</#if>
</ul>