Liferay 7 Asset publisher 新的网页内容文件夹

Liferay 7 Asset publisher new web content folder

我在 Liferay 7.0 中有两个 Web 内容结构(foo 和 bar),我想将 Web 内容存储在 webcontents 文件夹(webcontents/foo 和 webcontents/bar)中。 我添加了两个资产发布者,每个结构一个,我还允许用户通过资产发布者加“+”图标创建新的网络内容。但是,它们是在 Web 内容根文件夹 (webcontents/) 中创建的。有什么方法可以将通过资产发布者中的“+”图标创建的 Web 内容动态保存到特定文件夹(基于模板本身、标签或任何其他字段)?

我不认为如果没有自定义就可以实现这一点。

我会创建一个 service wrapper 来确定文件夹,例如通过结构的名称。

对于这个确切的场景,我使用了 "ModelListener"。 https://dev.liferay.com/de/develop/tutorials/-/knowledge_base/7-0/model-listeners

如果您扩展 Liferays BaseModelListener,您可以使用例如 onBeforeCreate() 方法。
首先检查当前 journalArticle 的 ddmStructure 并获取或创建您的文件夹。现在为您的 journalArticle 设置文件夹 ID,大功告成!

将代码作为@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);

    }