Liferay 7 资产发布者新的网页内容文件夹
Posted
技术标签:
【中文标题】Liferay 7 资产发布者新的网页内容文件夹【英文标题】:Liferay 7 Asset publisher new web content folder 【发布时间】:2019-06-14 18:05:08 【问题描述】:我在 Liferay 7.0 中有两个 web 内容结构(foo 和 bar),我想将 web 内容存储在 webcontents 文件夹中(webcontents/foo 和 webcontents/bar)。 我添加了两个资产发布者,每个结构一个,我还允许用户通过资产发布者加“+”图标创建新的网络内容。但是,它们是在 Web 内容根文件夹 (webcontents/) 中创建的。有什么方法可以将通过资产发布者中的“+”图标创建的网络内容动态保存到特定文件夹(基于模板本身、标签或任何其他字段)?
【问题讨论】:
【参考方案1】:我为这个确切的场景使用了“ModelListener”。 https://dev.liferay.com/de/develop/tutorials/-/knowledge_base/7-0/model-listeners
如果你扩展 Liferays BaseModelListener,你可以使用 onBeforeCreate() 方法。 首先检查当前 journalArticle 的 ddmStructure 并获取或创建您的文件夹。现在为您的 journalArticle 设置文件夹 ID 并完成!
【讨论】:
【参考方案2】:我认为如果不进行定制,这是无法实现的。
我会创建一个service wrapper 来确定文件夹,例如由结构的名称。
【讨论】:
如果链接不可用,可以稍微解释一下并添加一些相关代码。 链接为官方文档。答案可以没有代码,说“您需要执行自定义”。在 LR 6.2 中它被称为 Hook,在 7.0 中我们有一个服务包装器。是对 LR 默认行为的覆盖。我将保持这个问题开放,以便查看有关配置的任何其他意见。【参考方案3】:将代码发布为@Viergelenker 建议的解决方案
public class ArticleSetListenerPortlet extends BaseModelListener<JournalArticle>
private static final Log LOGGER = LogFactoryUtil.getLog(ArticleSetListenerPortlet.class);
@Override
public void onBeforeCreate(JournalArticle model) throws ModelListenerException
String structureName = model.getDDMStructure().getName(Locale.US);
long groupId = xxxxx;
List<JournalFolder> journalFolders = JournalFolderLocalServiceUtil.getFolders(groupId);
for(JournalFolder folder : journalFolders)
if("Foo".equals(folder.getName()))
model.setFolderId(folder.getFolderId());
LOGGER.info("Set folder as Foo");
super.onBeforeCreate(model);
【讨论】:
感谢您的加入!希望减少运行时间的一个小改进:JournalFolder folder = JournalFolderLocalServiceUtil.fetchFolder( groupId, title );
不确定实现,但这应该做一个数据库查询,你不需要 for 循环 :)
我明白了。但就我而言,我确实有几个文件夹,所以我需要 for :)以上是关于Liferay 7 资产发布者新的网页内容文件夹的主要内容,如果未能解决你的问题,请参考以下文章
Liferay 6 - 将 Web 内容显示 Portlet 居中
Liferay 6.2 - (VM)资产发布者的速度模板 - 如何获取它在另一个变量中的变量?