Nascondere sottocategorie senza nascondere i loro argomenti nell'elenco argomenti?

Ciao a tutti

Esiste un modo per “nascondere” le sottocategorie dalle liste degli argomenti e mostrare invece le categorie genitore sotto il titolo dell’argomento?

Il mio obiettivo è avere una categoria radice con n sottocategorie. Queste sottocategorie non devono essere visualizzate nel frontend; servono solo a limitare l’accesso ai post in base all’appartenenza a un gruppo.

Nella lista degli argomenti vorrei visualizzare la categoria genitore sotto il titolo dell’argomento, invece della sottocategoria.

Avrei pensato di usare i tag, ma purtroppo non è possibile limitare l’accesso agli argomenti in questo modo.

1 Mi Piace

Il template per gli elementi nell’elenco degli argomenti mostra solo il link alla categoria dell’argomento, come questo:
{{category-link topic.category}}

Quindi dovresti modificare questo template per mostrare i link alla categoria genitore:

{{#if topic.category.parentCategory}}
  {{category-link topic.category.parentCategory}}
{{else}}
  {{category-link topic.category}}
{{/if}}

Ma se desideri che ciò accada solo per una specifica categoria genitore, dovresti aggiungere più logica. Non so quale sia il metodo consigliato per farlo, registrando un helper Handlebars?

Un altro approccio potrebbe essere mostrare sempre sia i link alla categoria che quelli alla categoria genitore, per poi nascondere quelli che non desideri con il CSS.

2 Mi Piace

Non ho controllato, ma penso che dovresti poter nasconderli con il CSS.

1 Mi Piace

Devo modificare il modello anche per questo approccio? Non sono riuscito a trovare un’impostazione del sito del genere nella mia amministrazione.

Le categorie principali non sono presenti nel modello predefinito, quindi sì, immagino tu debba modificare il modello. Almeno non sono a conoscenza di un approccio più leggero per ottenerlo.

Non esiste un’impostazione del sito per modificare i modelli; ti invierò il codice per provarlo tramite messaggio privato.

1 Mi Piace

In generale, dovresti evitare sovrascritture complete dei template poiché richiedono manutenzione: dovresti eseguire un diff e verificare cosa è cambiato se un aggiornamento di Discourse interrompe il tuo tema.

Ciò che puoi fare è fare un passo indietro e modificare i dati che vengono passati al template.

topic-list-item è un componente Ember, quindi puoi utilizzare api.modifyClass per apportare le modifiche desiderate.

Ad esempio, ecco un frammento di codice che mostrerà il badge della categoria genitore nei topic delle sottocategorie sotto il titolo. Se il topic si trova nella categoria principale, il codice non avrà alcun effetto.

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  // ID delle categorie genitore
  const targetCategoryIds = [9, 15, 50];

  const useParentCategory = function () {
    const parentCategory = this.attrs.topic.category.parentCategory;
    const switchToParent = parentCategory && targetCategoryIds.includes(parentCategory.id)

    if (switchToParent) {
      this.attrs.topic.set("category", parentCategory);
    }
  };

  api.modifyClass("component:topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });

  api.modifyClass("component:latest-topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });
</script>
4 Mi Piace

Questo è fantastico!

C’è un modo per limitarlo a una o più categorie specifiche?

Due modi diversi per affrontare la questione, a seconda di ciò che vuoi ottenere. Qual è il risultato desiderato?

  1. Tutte le sottocategorie sotto la categoria genitore “foo” devono avere questo comportamento.
  2. Alcune sottocategorie sotto categorie genitore diverse devono avere questo comportamento.

@Johani

Questo è quello che stiamo cercando

Ho modificato il frammento sopra per riflettere tale cambiamento. Tutto ciò che devi fare è aggiungere gli ID delle categorie padre all’array targetCategoryIds. Puoi trovare l’ID della categoria visitando la pagina della categoria e controllando l’URL.

 https://meta.discourse.org/c/support/6

“6” alla fine dell’URL sopra è l’ID della categoria supporto qui su Meta.

3 Mi Piace

Grazie per aver condiviso questo, @Johani! Sto appena iniziando con Ember… siete davvero utili! :pray: :relaxed:

2 Mi Piace

È incredibile! Grazie mille per il rapido aiuto.

2 Mi Piace

È fantastico sentirlo!

Due pollici in su

Basta solo abituarvisi un po’. Se qualcosa nel codice non è chiaro, sentiti libero di creare un argomento nella categoria Development e taggami.

2 Mi Piace

È davvero fantastico. Grazie per questo e grazie a tutti coloro che ti dedicano il loro tempo per farlo.

:+1:

2 Mi Piace

@Johani Dove devo inserire esattamente questo frammento di codice?
Ho provato a inserirlo nella sezione <head> e nell’intestazione del componente del mio tema, dove conservo tutto il mio CSS. Ma poi l’elenco degli argomenti viene interrotto esattamente nel punto in cui dovrebbe essere elencato il primo argomento interessato della sottocategoria.

1 Mi Piace

Sì, c’era un problema con il modo in cui era impostata la categoria che non avevo notato in locale. Ho modificato il frammento sopra e ora dovrebbe funzionare.

Il frammento sopra ti permette di impostare le categorie su cui vuoi che funzioni. Se vuoi che funzioni su tutte le categorie, useresti qualcosa del genere.

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  const useParentCategory = function () {
    const parentCategory = this.attrs.topic.category.parentCategory;

    if (parentCategory) {
     this.attrs.topic.set("category", parentCategory);
    }
  };

  api.modifyClass("component:topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });

  api.modifyClass("component:latest-topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });
</script>
2 Mi Piace

Grazie @Johani per il tuo aiuto, lo apprezzo davvero!

1 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.