الحصول على اسم الفئة باستخدام JS

مرحبًا، ربما يتمكن أحدكم من المساعدة.
أحتاج إلى الحصول على اسم الفئة للصفحة الحالية.
أحتاج إلى ذلك في سكريبت JavaScript يمكنني إضافته إلى التذييل أو الجسم.
لقد جربت بعض الحلول، لكنني لم أستطع جعلها مستقرة نظرًا لانتقالات المستخدم بين الصفحات.
أخطط لتمرير اسم الفئة الناتج كحدث في Google Analytics لحساب الزيارات لكل فئة.

قد يكون هناك طريقة للقيام بذلك بشكل متسق عبر صفحات المواضيع وصفحات التصنيفات، لكنني حصلت على معرف التصنيف بطريقتين مختلفتين… واحدة لصفحات التصنيفات:

<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).

9 إعجابات

تمكنت من الحصول على معرف الفئة (Category ID) لصفحات الفئة والمواضيع،
لكن عندما أذهب إلى صفحة الأسئلة الشائعة (FAQ) أو أي صفحة أخرى، يتم عرض معرف الفئة من الصفحة السابقة أيضًا.
كيف يمكنني استبعاد ذلك؟

إليك الكود الخاص بي، وهو يعمل، لكنني لا أعرف 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>

لابد أنني أخطأت في شيء ما في المتغيرات، أو أحتاج إلى الحصول على وحدة تحكم (controller) لنوع مختلف من الصفحات.

إعجاب واحد (1)