こんにちは、どなたかお手伝いいただけますでしょうか。
現在のページのカテゴリ名を取得する必要があります。
フッターまたはボディに追加できる JS スクリプトでこれを実現したいと考えています。
いくつかの解決策を試してみましたが、ユーザーのページ遷移を考慮すると安定して動作させることができませんでした。
取得したカテゴリ名を Google アナリティクスへのイベントとして送信し、カテゴリごとの訪問数をカウントする予定です。
トピックページとカテゴリページの両方で一貫して実現する方法があるかもしれませんが、カテゴリID を取得する方法が2つあります。カテゴリページの場合は以下の通りです。
<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 を使う方がよいでしょう。
「いいね!」 9
カテゴリページとトピックページのカテゴリ ID を取得することはできましたが、FAQ や他のページに移動すると、前のページのカテゴリ ID も表示されてしまいます。これを除外するにはどうすればよいでしょうか?
以下が私のコードです。動作はしていますが、JavaScript 全般については詳しくありません。
<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>
変数の設定に何か間違えているか、異なるタイプのページのコントローラーを取得する必要があるのかもしれません。
「いいね!」 1