Liferay 通过模板禁用Web内容显示中的边框

Liferay 通过模板禁用Web内容显示中的边框,liferay,velocity,Liferay,Velocity,我正在为Liferay网站上的Web内容显示创建一组自定义结构(和匹配模板) 为了使站点维护人员更方便,我希望这些模板中的一个在默认情况下抑制外观边界 我在网上找到了一些文档和示例,展示了如何为嵌入主题的portlet禁用边框,但我没有在WCD模板中应用这些技术 以下是我在主题中看到的代码: #set ($VOID = $velocityPortletPreferences.setValue("portlet-setup-show-borders", "false")) #set ($VOID

我正在为Liferay网站上的Web内容显示创建一组自定义结构(和匹配模板)

为了使站点维护人员更方便,我希望这些模板中的一个在默认情况下抑制外观边界

我在网上找到了一些文档和示例,展示了如何为嵌入主题的portlet禁用边框,但我没有在WCD模板中应用这些技术

以下是我在主题中看到的代码:

#set ($VOID = $velocityPortletPreferences.setValue("portlet-setup-show-borders", "false"))
#set ($VOID = $theme.runtime("customportletname_WAR_pluginname", "", $velocityPortletPreferences.toString()))
$velocityPortletPreferences.reset()
以下是我如何将其应用于我的模板:

#set ($VOID = $velocityPortletPreferences.setValue("portlet-setup-show-borders", "false"))
<div class="custom-wcd wcdnormal">
    <h2>$title.getData()</h2>
    $content.getData()
</div>
$velocityPortletPreferences.reset()
#set ($portletPreferencesService = $serviceLocator.findService('com.liferay.portal.service.PortletPreferencesLocalService'))
#set ($companyId = $getterUtil.getLong($companyId))
#set ($ownerId = 0) ## PortletKeys.PREFS_OWNER_ID_DEFAULT
#set ($ownerType = 3) ## PortletKeys.PREFS_OWNER_TYPE_LAYOUT
#set ($plid = $getterUtil.getLong($request.theme-display.plid))
#set ($portletId = $request.theme-display.portlet-display.id)
#set ($portletPreferences = $portletPreferencesService.getPreferences($companyId, $ownerId, $ownerType, $plid, $portletId))
#set ($VOID = $portletPreferences.setValue('portlet-setup-show-borders', 'false'))
#set ($VOID = $portletPreferences.store())
#set($VOID=$velocityPortletPreferences.setValue(“portlet设置显示边框”,“false”))
$title.getData()
$content.getData()
$velocityPortletPreferences.reset()
我对它不起作用并不感到惊讶——没有任何类似于$theme.runtime调用的方法将prefs应用于portlet,但我也不知道$theme.runtime在这一层是否合适,如果合适,作为第一个参数提供什么值。我怀疑最后一个是最有可能的选择,但我不知道如何将WCDPortlet标识为$theme.runtime,也不知道如何跟踪该信息(我不是Java开发人员)

我只是想澄清一下:在渲染时使用日志文章组件的Java控制器是不可接受的,我也不能修改它


感谢您的建议。

Liferay属性/首选项名称有时会发生变化。本周我创建了一个钩子来创建一个站点,用包含portlet的页面填充它,并为CMS提供一组默认的结构、模板和文章。我也必须关闭Portlet的边框,并需要将以下首选项名称设置为false以实现此目的:portletSetupShowBorders

我编写了java代码,它按如下方式执行:

PortletPreferences prefs = PortletPreferencesFactoryUtil.getLayoutPortletSetup(page, portletInstanceId);
prefs.setValue("groupId", String.valueOf(page.getGroupId()));
prefs.setValue("articleId", article.name());
prefs.setValue("portletSetupShowBorders", "false");
prefs.store();
从Liferay日志模板中,您应该能够使用以下代码打开portlet的边框,该边框将显示使用该模板的文章:

#set ($VOID = $velocityPortletPreferences.setValue("portlet-setup-show-borders", "false"))
<div class="custom-wcd wcdnormal">
    <h2>$title.getData()</h2>
    $content.getData()
</div>
$velocityPortletPreferences.reset()
#set ($portletPreferencesService = $serviceLocator.findService('com.liferay.portal.service.PortletPreferencesLocalService'))
#set ($companyId = $getterUtil.getLong($companyId))
#set ($ownerId = 0) ## PortletKeys.PREFS_OWNER_ID_DEFAULT
#set ($ownerType = 3) ## PortletKeys.PREFS_OWNER_TYPE_LAYOUT
#set ($plid = $getterUtil.getLong($request.theme-display.plid))
#set ($portletId = $request.theme-display.portlet-display.id)
#set ($portletPreferences = $portletPreferencesService.getPreferences($companyId, $ownerId, $ownerType, $plid, $portletId))
#set ($VOID = $portletPreferences.setValue('portlet-setup-show-borders', 'false'))
#set ($VOID = $portletPreferences.store())
请记住,您还需要将以下行添加到您的portal-ext.properties:

journal.template.velocity.restricted.variables=
简单直接:

$velocityPortletPreferences.setValue("portletSetupShowBorders", "false") 
$velocityPortletPreferences.setValue("languageIds", "pt_BR,en_US")
$velocityPortletPreferences.setValue("displayStyle", "1")
$theme.runtime("82", "", $velocityPortletPreferences.toString())
$velocityPortletPreferences.reset()

此示例用于将语言portlet(portlet ID=82)直接嵌入到一个.vm主题文件中,在我的示例中,此代码位于navigation.vm上。

感谢您深思熟虑的回答,但此解决方案不符合我的标准。我试图通过定制模板中可用的VM代码,而不是通过java(无论是在控制器还是定制挂钩中)来发现是否有实现这一点的方法。如果其他人认为这很有用,我仍然会向上投票。似乎我没有完全理解你的问题,但通过你的补充评论,我再次研究了这个问题,并能够生成一些velocity代码,从显示基于此代码模板的文章的portlet中删除边框。我希望这能完全回答你的问题。哇。反应非常彻底。我还不知道我是否可以选择调整属性文件,所以我可能无法继续这样做,但它似乎可以在我的本地工作站上工作。做得很好,终于有机会测试了。它起作用了!非常感谢!