Ist es möglich, kategoriefreundliche Themen und Beitragsreaktionen zu haben?
Ich finde nichts Out-of-the-Box und keine vorhandenen Komponenten.
Wenn es derzeit nicht möglich ist, welche Schritte wären erforderlich, um so etwas zu erreichen?
Ist es möglich, kategoriefreundliche Themen und Beitragsreaktionen zu haben?
Ich finde nichts Out-of-the-Box und keine vorhandenen Komponenten.
Wenn es derzeit nicht möglich ist, welche Schritte wären erforderlich, um so etwas zu erreichen?
Hallo Noah,
Du hast Recht, es gibt derzeit keine Möglichkeit, unterschiedliche Reaktionen für Beiträge/Themen basierend auf einer bestimmten Kategorie anzuzeigen.
Am besten fragst du in Marketplace nach.
Perfekt ![]()
Ich habe einige Erfahrung mit der Entwicklung in anderen Umgebungen, aber ich prüfe, ob dies über eine Theme-Komponente möglich ist.
Mit ein wenig Hilfe von KI
scheint es zu funktionieren, bin mir aber nicht 100% sicher, ob dies der richtige Weg ist, dies in Discourse zu erreichen:
<script type="text/discourse-plugin" version="0.1">
api.onPageChange(() => {
try {
const isTopicPage = /^\/t\//.test(window.location.pathname);
// Nur auf Topic-Seiten ausführen
if (!isTopicPage) return;
const allowedCategories = ['ask-a-question']; // Kategorie-Slugs direkt verwenden
// Auf die Topic-Details zugreifen, um den Kategorie-Slug zu erhalten
const topic = Discourse.__container__.lookup("controller:topic");
const categorySlug = topic && topic.get("model.category.slug");
const isAllowedCategory = categorySlug && allowedCategories.includes(categorySlug);
// Funktion zum Ein- oder Ausblenden des spezifischen Emojis
const toggleReactionEmoji = () => {
const emoji = document.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji mit data-reaction='frog' ${isAllowedCategory ? 'angezeigt' : 'ausgeblendet'}.`);
}
};
// Erster Check, falls das Element bereits im DOM vorhanden ist
toggleReactionEmoji();
// Einen Mutationsbeobachter einrichten, um Emoji basierend auf Kategorieänderungen ein- oder auszublenden
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (node.nodeType === 1) { // Prüfen, ob es sich um einen Elementknoten handelt
const emoji = node.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji mit data-reaction='frog' in Mutation gefunden und ${isAllowedCategory ? 'angezeigt' : 'ausgeblendet'}.`);
}
}
});
});
});
// Den Body auf Änderungen der Kindknoten beobachten (z.B. Hinzufügen von Reaktionen)
observer.observe(document.body, { childList: true, subtree: true });
// Den Beobachter beim Navigieren aufräumen
api.cleanupStream(() => observer.disconnect());
} catch (error) {
console.error("Ein Fehler ist im Emoji-Umschaltungs-Skript aufgetreten:", error);
}
});
</script>