【问题标题】:Disable borders in Web Content Display via template通过模板禁用 Web 内容显示中的边框
【发布时间】:2012-08-16 04:02:21
【问题描述】:

我正在为 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()

我对它不起作用并不感到惊讶——没有什么类似于将首选项应用于 portlet 的 $theme.runtime 调用,但我也不知道 $theme.runtime 是否适用于此层,如果是,作为第一个参数提供什么值。我怀疑这最后一个是最有可能的替代方案,但我不知道如何识别 $theme.runtime 的 WCD portlet,也不知道如何跟踪该信息(无论如何我都不是 Java 开发人员) .

澄清一下:disable borders on all portlets by default 不接受它,我也无法修改在渲染时使用日志文章组件的 Java 控制器。

感谢任何建议。

【问题讨论】:

    标签: liferay velocity


    【解决方案1】:

    简单直接:

    $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。

    【讨论】:

    • 终于有机会测试了。有用!非常感谢!
    【解决方案2】:

    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 ($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=
    

    【讨论】:

    • 感谢您的周到回复,但此解决方案不符合我的标准。我试图发现是否有办法通过自定义模板中可用的 VM 代码来执行此操作,而不是通过 java(无论是在控制器还是自定义挂钩中)。仍在投票,以防其他人觉得这很有用。
    • 似乎我没有完全理解您的问题,但是根据您的附加评论,我再次调查了问题并能够生成一些速度代码,该代码从显示基于文章的 portlet 中删除边框带有此代码的模板。我希望这能完全回答您的问题。
    • 哇。非常彻底的回应。我还不知道我是否可以选择调整属性文件,所以我可能无法进行此操作,但它似乎可以在我的本地工作站上运行。做得很好。
    猜你喜欢
    • 2017-11-29
    • 2016-09-04
    • 1970-01-01
    • 2015-11-09
    • 2017-07-21
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多