Créer des sous-sujets ?

I would like to make some topics sub-topics of others.

Say I have “Topic A”. On the Topic A page, I will put a button to “create sub topic”. That will allow the user to create a new topic, “topic b”. topic b would be a child of Topic A.

What this means, from the user experience, is:

I could also have a button on the Topic A page to “view all the child topics of Topic A”, and this would go to a list of Topic A’s child topics, such as topic b and any other topics that are children of Topic A.

What’s the best way to do this? (I’m assuming I’ll have to do it in a plugin, which is fine.)

Note I’d only be looking for one level of subtopic down, not several.

Here’s some detail on the possibilities I think could do it:

Categories (though this probably is not the best way to go)

Categories would provide similar functionality to what I have in mind, but that could get too heavy once there are a decent number of topics with subtopics (it seems like overkill to basically have a new category for each parent topic).

or

Tags

The best I can think of right now is using tagging. So that when you click “create sub topic” on Topic A, it opens up a new topic, and I programmatically add a hidden tag, like “Topic-A”, that links to Topic A. Then when you click “view all sub topics” of Topic A, it does a search for the tag “Topic-A”.

This seems pretty clean, other than the fact that there will be a lot of tags (basically one tag for each main topic, which could end up being a lot).

or

Custom Fields for Topics

Another possibility I’ve considered is to create a custom field for topics, which would be an array of the ids of that topic’s sub-topics. This also could work, but would probably be slightly more complicated to code.

For example, I’d have to update the main topic’s custom field only after a subtopic is created; and, I’d have to create a new kind of search–searching for all the topics within the main topic’s custom field array–instead of just using the pre-built tag search functionality.

Is there another solution I’m missing?

2 « J'aime »

Je vois une autre solution qui pourrait fonctionner, sans travail de code lourd.

Avec le plugin assistant personnalisé, vous pouvez effectuer plusieurs actions dans une seule procédure. Dans ce cas, vous demanderiez à l’utilisateur de rédiger son sous-sujet via un assistant qui :

  • Crée un nouveau sujet pour le sous-sujet
  • Crée une réponse dans le sujet principal avec un lien vers le sous-sujet.

Avec un peu de CSS personnalisé pour tous les messages principaux (vous pouvez ajouter une classe CSS pour les sélectionner via une catégorie ou un tag), vous pouvez modifier l’apparence des réponses pour correspondre à ce que vous avez en tête. Vous pourriez également trouver un moyen, via l’assistant, d’ajouter un paramètre aux réponses qui vous permettra de sélectionner uniquement les réponses automatiques.

Si vous n’aimez pas la solution des réponses, je pense que l’assistant personnalisé pourrait aussi ajouter un tag sur le sous-sujet créé.

1 « J'aime »

Je n’y avais pas pensé. Merci. L’élément clé qui me manque dans le sous-thème est un lien vers le thème principal, comme une balise (« Topic-A ») associée au sous-thème. Pensez-vous que l’assistant, lors de la soumission, enverrait un appel API pour créer la balise et la lier au sous-thème ? (Je ne connais pas très bien le plugin assistant.) Je pense aussi qu’une limite du plugin assistant est qu’il ouvre sa propre page, qui ne possède pas l’en-tête normal de mon site. Autrement dit, je crois que toute page contenant l’assistant aura une apparence très différente du reste de l’application, ce qui pourrait être déroutant pour les utilisateurs dans ce cas.

Je pensais justement que j’aimerais aussi avoir un niveau de sous-sujets. Cela permettrait d’obtenir un niveau d’imbrication/hiérarchie, tout en gardant l’interface épurée pour qu’il n’y ait pas une multitude de conversations imbriquées.

Exemples de la façon dont je pourrais l’utiliser :

  • Créer un sujet pour un épisode/une publication/un article et demander aux gens de créer des sous-sujets basés sur leurs réactions.

  • Créer un sujet de question, puis demander aux gens de créer des sous-sujets avec leurs propres réponses (bonus pour l’option de limiter un sous-sujet par personne).

Avez-vous progressé dans la création d’un plugin ou avez-vous trouvé comment faire cela avec les fonctionnalités actuelles de Discourse ?

La seule façon que j’ai vue de le faire était d’utiliser des champs personnalisés de sujet. Par exemple, le sous-sujet pourrait avoir un champ personnalisé reliant au sujet principal. Ensuite, vous pouvez rechercher tous les sujets ayant ce sujet principal comme valeur de champ personnalisé. Je n’ai pas encore de plugin entièrement implémenté, mais j’ai réussi à le faire fonctionner en gros en développement en utilisant du code comme celui que j’ai mentionné ici : Retrieve Topics based on custom field? - #12 by JQ331

1 « J'aime »

Ah oui, j’imagine que si l’on créait un champ personnalisé de sujet de type « sujet-parent » ou quelque chose de similaire, il y aurait de nombreuses façons d’en tirer parti. Je vais examiner de plus près le lien que vous avez partagé, et j’espère apprendre un peu de Ruby en cours de route. Merci !

1 « J'aime »