Caricamento argomenti in un nuovo outlet di plugin che ho aggiunto

Penso di aver fatto funzionare questa cosa. Obiettivo: caricare determinati argomenti in un punto specifico di un nuovo modello (probabilmente funziona anche per l’aggiunta a modelli esistenti, ma non l’ho testato):

  1. Inserisci il tuo outlet plugin inventato nel tuo modello (il mio outlet plugin inventato si chiama “great-topics”, ad esempio):

{{plugin-outlet name="great-topics"}}

  1. Aggiungi il codice Handlebars (ovvero il tuo componente) in un connettore:

[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.hbs

<div>Sono nell'outlet plugin! Carica gli argomenti:</div>
{{topic-list topics=featuredTopics showPosters=true}}
  1. Aggiungi il codice JavaScript per il componente che si trova nel tuo nuovo connettore:

[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.js.es6
[questo codice è adattato dal seguente post su Meta che contiene codice per caricare argomenti con il tag “featured”: https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949]

const ajax = require('discourse/lib/ajax').ajax;
const Topic = require('discourse/models/topic').default;

setupComponent(args, component) {
 ajax("/tag/featured.json").then(function (result) {
                 
   let featuredTopics = [];
   // Crea un array vuoto, vi spingeremo gli argomenti

   var featuredUsers = result.users;
   // Ottieni gli utenti rilevanti

   result.topic_list.topics.slice(0, 4).forEach(function (topic) {
   // Stiamo estraendo gli argomenti partendo da 0 fino a 4
   // Questo significa che ne mostreremo 3 in totale. Aumenta 4 per mostrarne di più.

     topic.posters.forEach(function (poster) {
        poster.user = $.grep(featuredUsers, function (e) { return e.id == poster.user_id; })[0];
                        });
         // Associa gli utenti al nostro argomento

      featuredTopics.push(Topic.create(topic));
        // Aggiungi i nostri argomenti all'array featuredTopics
     });
   }) // fine result.topic.topic_list...
                    
component.set('featuredTopics', featuredTopics);  // qui gli argomenti vengono aggiunti al componente
 
component.set("loadingTopics", false); //il mio codice sopra non ha un caricatore. ma questo è presente se vuoi un caricatore. Devi aggiungerlo al file hbs per quello. Vedi il post collegato su Meta sopra

  }); // fine ajax 


 }// fine setup component


Per me funziona, almeno per caricare argomenti con il tag “featured” nell’outlet plugin del mio nuovo modello.

Per vedere questo in funzione, sarà necessario riavviare il server.

1 Mi Piace