Hallo, vielleicht kann mir jemand helfen.
Ich benötige den Kategorienamen der aktuellen Seite.
Ich brauche dies in einem JS-Skript, das ich im Footer oder Body einfügen kann.
Ich habe bereits einige Lösungen ausprobiert, konnte aber keine stabile Umsetzung finden, insbesondere angesichts der Seitenübergänge des Benutzers.
Ich plane, den resultierenden Kategorienamen als Event in Google Analytics zu übergeben, um die Besuche pro Kategorie zu zählen.
Es könnte einen Weg geben, dies konsistent sowohl auf Themen- als auch auf Kategorienseiten umzusetzen, aber ich habe die Kategorie-ID auf zwei verschiedene Arten erhalten – eine für Kategorienseiten:
<script type="text/discourse-plugin" version="0.8">
const container = Discourse.__container__;
const controller = container.lookup('controller:navigation/category');
api.onPageChange((url, title) => {
console.log(controller.get("category.id"));
});
</script>
und eine ähnliche Methode für Themen:
<script type="text/discourse-plugin" version="0.8">
const container = Discourse.__container__;
const controller = container.lookup('controller:topic');
api.onPageChange((url, title) => {
console.log(controller.get("model.category_id"));
});
</script>
Im Beispiel für die Kategorienseite können Sie alternativ category.name oder category.slug verwenden. Beim Themenmodell ist jedoch nur die category_id verfügbar, sodass Sie dort etwas mehr Aufwand betreiben müssten, um den Namen zu erhalten. Die ID ist ohnehin möglicherweise der bessere Weg, da sie konsistent bleibt, selbst wenn sich der Kategorienname oder der Slug ändert.
Ich konnte die Kategorien-ID für die Kategorie- und Themen-Seiten abrufen.
Aber wenn ich zur FAQ oder zu einer anderen Seite gehe, wird die Kategorien-ID von der vorherigen Seite ebenfalls angezeigt.
Wie kann ich das ausschließen?
Hier ist mein Code, er funktioniert, aber ich kenne JS im Allgemeinen nicht.
<script type="text/discourse-plugin" version="0.8">
const container = Discourse.__container__;
api.onPageChange((url, title) => {
const topic = container.lookup('controller:topic');
const topic_cat_id = topic.get("model.category_id");
if(typeof topic_cat_id !== "undefined")
{
gtag('event', 'Categories Views Analytics', {
'event_category': 'Topic Page',
'event_label': topic_cat_id,
});
console.log("Topic " + topic_cat_id);
} else {
const category = container.lookup('controller:navigation/category');
const category_cat_id = category.get("category.id");
if(typeof category_cat_id !== "undefined")
{
gtag('event', 'Categories Views Analytics', {
'event_category': 'Category Page',
'event_label': category_cat_id,
});
console.log("Category " + category_cat_id);
} else {
gtag('event', 'Categories Views Analytics', {
'event_category': 'Other Page',
'event_label': 'Other Page'
});
console.log("Other");
}
}
});
</script>
Ich muss etwas in den Variablen falsch gemacht haben oder ich muss einen Controller einer anderen Seitenart abrufen.