عرض أرقام المشاركات

Is it possible to show post numbers for each post (Or easy to do via CSS or similar). My use case is running forum mafia, where allowing users to easily refer to a post without the bulk of quoting it would be amazing.

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

Just press the link button under each post, and the post number is visible there.

It is hard to say if this is what you are looking for, but it should get you close.

https://github.com/sitepoint/discourse-theme/blob/b4b4a7218ffbbfd4ee3cf8aa7421d29c96fdc4ed/assets/stylesheets/desktop/topic-post.scss#L45-L51

We use that CSS to put #1, #2, et al on a topic after the date/timestamp.

10 إعجابات

Yes, it is, this is amazing :slight_smile:

Thanks so much!

a.post-date span {
  margin-right: 1em;
}

a.post-date:after {
  content: "#"attr(data-post-number);
}

لم يعد هذا يعمل. هل هناك طريقة حالية لإظهار أرقام المشاركات؟

إعجابَين (2)

الآن لا يحتوي وسم post على معرف data-post-number، وهذا النمط CSS لا يعمل، لا أعرف ما إذا كانت هناك طريقة أخرى للحل؟

ليس بدون جافاسكريبت.

3 إعجابات

شكراً على الرد، هل هذا مكون إضافي يحتاج إلى كتابته لاستدعاء واجهة برمجة التطبيقات؟ أم أنه مكتوب ببساطة في مكون السمة؟

شكراً جزيلاً. لقد قمت بحل المشكلة الآن!

api.decorateCooked(() => {
          var add_post_number_timer = setTimeout(() => {
            var articles = document.getElementsByTagName("article");
            for (var i = 0; i < articles.length; i++) {
              var post_date = articles[i].getElementsByClassName("post-date");
              if (post_date.length != 0) {
                var post_number = articles[i].getAttribute("id").replace("post_", "");
                post_date[1].setAttribute("data-post-number", post_number);
              }
            }
            clearTimeout(add_post_number_timer);
          }, 500);
        }, {
        id: 'add_post_number'
    });

رائع! لقد اكتشفت كيفية القيام بذلك. :+1:

فيما يلي بعض التحسينات التي يمكنك إجراؤها:

  • سيتم إيقاف api.decoratedCooked وسيتم استدعاؤه في كل مشاركة.
    يمكنك استخدام decorateCookedElement بدلاً من ذلك، والذي يعمل بدون jQuery.

  • يتم تمرير element يمثل المشاركة الحالية إلى واجهة برمجة التطبيقات (API)؛ يمكنك استخدامه كسياق للمشاركة الخاصة بك.

  • يمكنك العمل مع الدالة schedule من ember لانتظار عرض العنصر.

import { schedule } from "@ember/runloop";
// const { schedule } = require("@ember/runloop");  // استخدم هذا إذا كنت تعمل في واجهة المستخدم الإدارية

api.decorateCookedElement((element,  /* helper */) => {
  schedule("afterRender", () => {
    const article = element.closest("article");
    if (article) {
      article.dataset.postNumber = article.id.replace("post_", "");
    }
  });
});

image

3 إعجابات

: +1: شكراً جزيلاً على التصحيح.