Привет, возможно, кто-то сможет помочь.
Мне нужно получить название категории текущей страницы.
Мне это нужно в JS-скрипте, который я могу добавить в подвал или тело страницы.
Я попробовал несколько решений, но не могу добиться стабильной работы из-за переходов между страницами у пользователя.
Я планирую передать полученное название категории как событие в Google Analytics для подсчета посещений каждой категории.
Возможно, существует способ делать это единообразно на страницах тем и категорий, но я получил ID категории двумя разными способами… один для страниц категорий:
<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>
и аналогичный способ для страниц тем:
<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>
В примере со страницей категории можно также использовать category.name или category.slug, но в модели темы доступен только category_id, поэтому там потребуется немного больше работы, чтобы получить имя. В любом случае, использование ID может быть лучшим решением, так как оно остаётся неизменным даже при смене названия или slug категории.
Мне удалось получить ID категории для страниц категорий и тем, но когда я перехожу на страницу FAQ или другую страницу, также отображается ID категории с предыдущей страницы. Как это можно исправить?
Вот мой код, он работает, но я в целом не знаком с 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>
Наверное, я что-то напутал с переменными или мне нужно получить контроллер другого типа страницы.