Afficher les numéros de messages

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 « J'aime »

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 « J'aime »

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

Cela ne semble plus fonctionner. Existe-t-il un moyen actuel d’afficher les numéros de publication ?

2 « J'aime »

Maintenant, la balise post n’a pas d’identifiant data-post-number, ce style CSS ne fonctionne pas, je ne sais pas s’il existe une autre façon de résoudre le problème ?

Pas sans javascript.

3 « J'aime »

Merci pour votre réponse. S’agit-il d’un plugin qui doit être écrit pour appeler l’API ? Ou est-il simplement écrit dans le composant de thème ?

Merci beaucoup. J’ai résolu le problème maintenant !

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

Génial ! Vous avez trouvé comment faire. :+1:

Voici quelques améliorations que vous pouvez apporter :

  • api.decoratedCooked sera déprécié et est appelé à chaque publication.
    Vous pouvez utiliser decorateCookedElement à la place, qui fonctionne sans jQuery.

  • Un element représentant la publication actuelle est passé à l’API ; vous pouvez l’utiliser comme contexte de votre publication.

  • Vous pouvez travailler avec la fonction schedule d’ember pour attendre que l’élément soit rendu.

import { schedule } from "@ember/runloop";
// const { schedule } = require("@ember/runloop");  // utilisez ceci si vous exécutez dans l'interface d'administration

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

image

3 « J'aime »

: +1: Merci beaucoup pour la correction.