在 Magnolia CMS 中注册自定义 VirtualUriMapper

Posted

技术标签:

【中文标题】在 Magnolia CMS 中注册自定义 VirtualUriMapper【英文标题】:Registering a custom VirtualUriMapper in Magnolia CMS 【发布时间】:2021-05-27 00:35:09 【问题描述】:

我尝试为 Magnolia CMS 版本 6.1.3 实现自定义 VirtualUriMapping(RegexpVirtualUriMapping,但带有本地化)。 不幸的是,我不能在轻模块(yaml 定义)中使用我的类。我的类 (I18nVirtualUriMapping.java) 放置在一个模块中,该模块是我的自定义 web 应用程序 (magnolia-community-webapp 原型) 的依赖项。如何注册我的 VirtualUriMapper?

这是自定义类 I18nVirtualUriMapping.java(缩写):

package my.magnolia.module.mapping;

import info.magnolia.virtualuri.mapping.DefaultVirtualUriMapping;

public class I18nVirtualUriMapping extends DefaultVirtualUriMapping 
    


轻模块news-ROOT.yaml中的virtual-uri映射定义:

class: my.magnolia.module.mapping.I18nVirtualUriMapping
fromUri: /news(.*).html
toUri: forward:/News-Detail.html?news=$1

在轻模块中定义映射,我得到这个错误

2021-05-27 02:10:20,556 WARN  agnolia.transformer.ClassPropertyBasedTypeResolver: Encountered the 'class' property but failed to resolved the type from its value: [my.magnolia.module.mapping.I18nVirtualUriMapping]
java.lang.ClassNotFoundException: my.magnolia.module.mapping.I18nVirtualUriMapping
        at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_131]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_131]
...

【问题讨论】:

【参考方案1】:

经过长时间的搜索,我自己找到了解决方案。这是关于依赖注入 (https://docs.magnolia-cms.com/product-docs/Modules/Dependency-injection-and-inversion-of-control.html)。

public class I18nVirtualUriMapping extends DefaultVirtualUriMapping 
    private static final Logger log = LoggerFactory.getLogger(I18nVirtualUriMapping.class);

    private final I18nVirtualMappingModule module;

    @Inject
    public I18nVirtualUriMapping(final I18nVirtualMappingModule module) 
        this.module = module;
    

    //... 

【讨论】:

以上是关于在 Magnolia CMS 中注册自定义 VirtualUriMapper的主要内容,如果未能解决你的问题,请参考以下文章

自定义操作实施 Magnolia CMS

在 Magnolia CMS 中添加自定义图标

Magnolia CMS 中自定义内容类型的链接

使用 Blossom 在 Magnolia CMS 对话框中创建自定义字段

获取 magnolia cms 中执行的自定义操作的节点名称

在 Magnolia CMS 5 中将组件从一个自定义模板继承到另一个模板