Ciao, forse qualcuno può aiutarmi.
Ho bisogno di ottenere il nome della categoria della pagina corrente.
Devo ottenerlo in uno script JS che posso aggiungere a Footer o Body.
Ho provato alcune soluzioni, ma non riesco a renderle stabili, soprattutto considerando le transizioni di pagina dell’utente.
Intendo passare il nome della categoria risultante come evento in Google Analytics per contare le visite per ogni categoria.
Potrebbe esserci un modo per farlo in modo coerente sia nelle pagine degli argomenti che in quelle delle categorie, ma ho ottenuto l’ID della categoria in due modi diversi… uno per le pagine delle categorie:
<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>
e un modo simile per le pagine degli argomenti:
<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>
Nell’esempio della pagina della categoria, in alternativa, puoi usare category.name o category.slug, ma con il modello dell’argomento è disponibile solo category_id, quindi dovresti fare un po’ più di lavoro lì per ottenere il nome. L’ID potrebbe comunque essere un percorso migliore perché è coerente anche se il nome o lo slug della categoria cambiano.
Sono riuscito a ottenere l’ID Categoria per le pagine delle Categorie e degli Argomenti,
ma quando vado alle FAQ o a un’altra pagina, l’ID Categoria viene comunque visualizzato, preso dalla pagina precedente.
Come posso escluderlo?
Ecco il mio codice, funziona, ma in generale non conosco JS.
<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>
Devo aver combinato qualcosa con le variabili o aver bisogno di ottenere un controller di un tipo di pagina diverso.