根据自定义字段检索主题?

更新:我想我(基本上)让它(大部分)运行起来了(!)。现在,这将显示与自定义字段值匹配的“最新”主题。(#latest 方法是我在 config/routes.rb 文件中找到的最合理的方法。)

重要的是,事实上,所有具有相关自定义字段 fun_level 值的主题都必须加载到页面上。我还需要做些什么来实现这一点吗?


以下是代码,供我自己记录,同时也希望对其他人有所帮助:

–我创建了自定义字段 :fun_level。然后:

plugin.rb

TopicQuery.add_custom_filter(:fun_level) do |topics, query|
  if query.options[:fun_level]
    topics.where("topics.id in (
      SELECT topic_id FROM topic_custom_fields
      WHERE (name = 'fun_level')
      AND value = '#{query.options[:fun_level]}'
    )")
  else
    topics
  end
end

/connectors/my-plugin-outlet/fun-level.js.es6(这是一个 JavaScript 文件,在访问相关页面时会被激活。因此,这段 JavaScript 代码可以放在初始化器中,或者放在连接到插件出口的连接器中。我喜欢使用与连接器配合的代码,所以这里我将使用 setup 组件):

const ajax = require('discourse/lib/ajax')

export default {
    setupComponent(args, component) {
      let parsedResultArray = []
      var endPoint = '/latest?fun_level=' + funLevel  //funLevel = 来自参数的变量值   
      ajax(endPoint).then(function (result) {
            console.log('topic list result for topics matching that fun level = ')
            console.log(result.topic_list.topics)
            //解析结果,并将其加载到 parsedResultArray 中
            component.set('showTopics', parsedResultArray        
      })
   }
}

现在,主题将被加载到我对应组件中的 {{topic-list topics=showTopics}},该组件通过 my-plugin-outlet 放入模板中。

这是一个巨大的进步。非常感谢@angus

4 个赞