Récupérer des sujets basés sur un champ personnalisé ?

MISE À JOUR : Je pense que j’ai (presque) réussi (!). Maintenant, cela affichera les sujets les plus récents correspondant à la valeur du champ personnalisé. (la méthode #latest était la plus proche que j’ai pu trouver qui avait du sens dans le fichier config/routes.rb).

Il est important que, en réalité, tous les sujets ayant la valeur pertinente du champ personnalisé fun_level soient chargés sur la page. Y a-t-il autre chose que je dois faire pour que cela se produise ?


Voici le code pour mes propres notes et au cas où cela serait utile à d’autres :

–J’ai créé le champ personnalisé :fun_level. Ensuite :

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 (un fichier JavaScript activé lors de la navigation vers la page concernée. Ainsi, ce JavaScript pourrait se trouver dans un initialiseur ou dans un connecteur reliant un plugin outlet. J’aime utiliser du code associé à un connecteur, alors j’utiliserai ici setupComponent) :

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

export default {
    setupComponent(args, component) {
      let parsedResultArray = []
      var endPoint = '/latest?fun_level=' + funLevel  //funLevel = variable avec la valeur des paramètres   
      ajax(endPoint).then(function (result) {
            console.log('liste des résultats de sujets correspondant à ce niveau de fun = ')
            console.log(result.topic_list.topics)
            //analyser les résultats et les charger dans parsedResultArray
            component.set('showTopics', parsedResultArray        
      })
   }
}

Maintenant, les sujets seront chargés dans {{topic-list topics=showTopics}} que j’ai dans le composant correspondant, lequel est inséré dans le modèle via my-plugin-outlet.

C’est une grande avancée. Merci beaucoup, @angus.

4 « J'aime »