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 ADT - 在自己的页面中打开资产

Liferay 6.2 - (VM)资产发布者的速度模板 - 如何获取它在另一个变量中的变量?

Liferay 7 - 在 Freemarker 中从 DDLRecord 获取动态属性

Liferay 6 - 显示网页内容页面

Liferay 网页内容