Plugin template helper


(megas) #1

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?


(Leo McArdle) #2

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:

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.


(megas) #3

Thanks, that solved the issue.