【问题标题】:Liferay 7 Asset publisher new web content folderLiferay 7 资产发布者新的网页内容文件夹
【发布时间】:2019-06-14 18:05:08
【问题描述】:

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

【问题讨论】:

    标签: liferay liferay-7 web-content


    【解决方案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 :)
      猜你喜欢
      • 2015-06-11
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多