问题描述
我有Liferay 7.2 我要自定义小部件文档和媒体的布局的html
我该怎么做?
解决方法
首先,您在谈论钩子这一事实告诉我您来自Liferay 6或更早版本。忘记旧的模块类型(“战争样式的模块”),使用新的“ jar样式的模块”或“ OSGi模块”,它们利用基础中的OSGi方法和机制。最接近钩子功能的新模块类型为"module fragment"。
或者,如果您想创建一个模块来覆盖一个以上的模块而不是其他模块的JSP(或者覆盖JSP,这是其主要目的的副作用),那么您可能想研究"JSP Bags"。>
尽管如此,Liferay's "Introduction to Customizing JSPs"认为,不建议使用这两种方法。
首选方法是使用Dynamic Includes(尽管它们仅在目标Portlet已写入包含包含点的情况下才起作用)或Portlet Filters(基本上允许您以编程方式编辑对和的请求)来自标准Portlet类和JSP的响应。
不过,如果您打算替换大多数标准文档和媒体小部件的JSP(请记住:小部件仍是Portlet,它们只是在前端被重命名),那么模块片段似乎仍然是最好的前进方式。
要识别正确的模块,请执行以下必要步骤。我将使用控制面板中的DLAdmin portlet作为示例来显示它:
- 标识要编辑的portlet:使用浏览器的DOM检查器查看HTML。在感兴趣的区域周围查找ID为
<section class="portlet" id="portlet_com_liferay_document_library_web_portlet_DLAdminPortlet">
之类的部分标签。 - 现在将该ID转换为portlet类为
com.liferay.document.library.web.portlet.DLAdminPortlet
的程序包路径。在Liferay github repository中搜索该类。 (转到那里,按T键,输入类名称,找到其Java类源文件。如果有多次匹配,则还需要检查包路径。) - 打开源文件后,在文件树中返回到
src
文件夹的父文件夹。有一个bnd.bnd
文件。看看它,它会告诉您Bundle-SymbolicName
。 - 使用Liferay IDE或Blade CLI(取决于您的开发环境)为
Bundle-SymbolicName
所标识的模块创建模块片段。