Zeige Beitrag-Nummern

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 „Gefällt mir“

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 „Gefällt mir“

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);
}

Das scheint nicht mehr zu funktionieren. Gibt es eine aktuelle Möglichkeit, Beitragsnummern anzuzeigen?

2 „Gefällt mir“

Jetzt hat ein Post-Tag keine data-post-number-Kennung mehr, dieser CSS-Stil funktioniert nicht, ich weiß nicht, ob es eine andere Möglichkeit gibt, das zu lösen?

Nicht ohne JavaScript.

3 „Gefällt mir“

Vielen Dank für die Antwort. Ist dies ein Plugin, das geschrieben werden muss, um die API aufzurufen? Oder ist es einfach in der Theme-Komponente geschrieben?

Vielen Dank. Ich habe das Problem jetzt gelöst!

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'
    });

Großartig! Du hast herausgefunden, wie es geht. :+1:

Hier sind ein paar Verbesserungen, die du vornehmen kannst:

  • api.decoratedCooked wird veraltet sein und wird bei jedem Beitrag aufgerufen.
    Du kannst stattdessen decorateCookedElement verwenden, das ohne jQuery funktioniert.

  • Ein element, das den aktuellen Beitrag darstellt, wird an die API übergeben; du kannst es als deinen Beitrags-Kontext verwenden.

  • Du kannst mit der schedule-Funktion von Ember arbeiten, um auf das Rendern des Elements zu warten.

import { schedule } from "@ember/runloop";
// const { schedule } = require("@ember/runloop");  // use this if running in Admin UI

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

image

3 „Gefällt mir“

::+1: Vielen Dank für die Korrektur.