简体   繁体   中英

How to fill out Dynamic Dropdown in Hippo CMS with dynamic values?

I have document type which contains "Dynamic Dropdown" field, and I want to fill it with some dynamic data. I couldn't figure out how to do it (couldn't find any adequate information, documentation, example about this). From links that I found I was able to do following things:

1) I've created service called SitemapValueListProvider in /hippo:configuration/hippo:frontend/cms/cms-services , with following properties:
plugin.class = com.test.cms.components.SitemapService
valuelist.provider = service.valuelist.custom

2) In CMS project created class com.test.cms.components.SitemapService

public class SitemapService extends Plugin implements IValueListProvider {

  private final static String CONFIG_SOURCE = "source";

  public SitemapService(IPluginContext context, IPluginConfig config) {
    super(context, config);

    String name = config.getString(IValueListProvider.SERVICE, "service.valuelist.custom");
    context.registerService(this, name);
  }

  @Override
  public ValueList getValueList(String name, Locale locale) {
    ValueList valuelist = new ValueList();

    if ((name == null) || (name.equals(""))) {
        System.out.println("No node name (uuid or path) configured, returning empty value list");
    } else {
        valuelist.add(new ListItem("custom4", "Custom Value 4"));
        valuelist.add(new ListItem("custom5", "Custom Value 5"));
        valuelist.add(new ListItem("custom6", "Custom Value 6"));
    }

    return valuelist;
  }

  @Override
  public List<String> getValueListNames() {
    List<String> list = new ArrayList<>(1);
    list.add("values");
    return list;
  }

  @Override
  public ValueList getValueList(IPluginConfig config) {
    if (config == null) {
        throw new IllegalArgumentException("Argument 'config' may not be null");
    }
    return getValueList(config.getString(CONFIG_SOURCE));
  }

  @Override
  public ValueList getValueList(String name) {
    return getValueList(name, null/*locale*/);
  }
}

3) In CMS project created class com.test.cms.components.TestPlugin

public class TestPlugin extends Plugin{

  public TestPlugin(IPluginContext context, IPluginConfig config) {
    super(context, config);
    context.registerService(this, "service.valuelist.custom");
  }    
} 

4) For field /hippo:namespaces/cms/TestItem/editor:templates/_default_/dynamicdropdown of document type provided following properties: (using console)
plugin.class = com.test.cms.components.TestPlugin

But still unable to obtain data dynamically. Nothing happens at all.
I'm using HippoCMS 10 Community Edition

you are totally on the right track and I can't spot any obvious reason why this is not working. Can you double check a few things?

  • look for an error in the logs, possibly at the early start of the CMS. Maybe there is an error during the bootstrap process.
  • activate the development mode in the CMS: this adds extra logging in the CMS. http://www.onehippo.org/library/development/debug-wicket-ajax-in-the-cms.html
  • you can also try to break the configuration by putting the wrong class name: if you don't have a ClassNotFound then you know your configuration is wrong and/or not picked-up.

HTH.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM