Plugin template helper

In my discourse plugin’s folder discourse-adplugin/assets/discourse/helpers/ I’ve created a file with helper

discourse-adplugin/assets/discourse/helpers/eq.js.es6:

import { registerHelper } from 'discourse/lib/helpers';

var makeBoundHelper = Ember.HTMLBars.makeBoundHelper;

registerHelper('insert_ad', makeBoundHelper(function(params) {
  var dfp_top_3_display = Discourse.SiteSettings.dfp_top_3_display;

  if (dfp_top_3_display < 0) return false;

  return params[0] == dfp_top_3_display;
}))

I’m using this helper in template, in development environment it works well but in docker production it produces an error:

Uncaught Error: Could not find module 'discourse/lib/helpers' imported from 'discourse/plugins/discourse-adplugin/discourse/helpers/eq'

What is the right way to create template helpers in plugin?

This would be because you’re using a different version of Discourse in development and docker production.

This commit moved the helpers from discourse/lib/helpers to discourse-common/lib/helpers:

https://github.com/discourse/discourse/commit/be1d74d20772e3a4ed2b3daed9700249024a133f

So if you update your development environment, and change the first line of your code to:

import { registerHelper } from 'discourse-common/lib/helpers';

then everything should work.

2 Likes

Thanks, that solved the issue.

1 Like