# 如何限制首帖的某些 Markdown 功能？

**URL:** https://meta.discourse.org/t/how-to-limit-some-of-markdown-features-for-first-post/276939
**Category:** Development
**Created:** [2023年八月28日 20:12 UTC](https://meta.discourse.org/t/how-to-limit-some-of-markdown-features-for-first-post/276939 "2023-08-28T20:12:08Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![hawm](https://avatars.discourse-cdn.com/v4/letter/h/f07891/32.png) [@hawm](https://meta.discourse.org/u/hawm)
#### Post date: [2023年八月28日 20:12 UTC](https://meta.discourse.org/t/how-to-limit-some-of-markdown-features-for-first-post/276939/1 "2023-08-28T20:12:08Z")

</div>

我想限制主题的第一个帖子（来自我的插件）的某些 Markdown 功能。

这可以通过访问 composer 模型中的 `topicFirstPost` 属性在客户端轻松实现。但是，在服务器端的 `lib/pretty_text.rb` 和 `model/post.rb` 中，我发现只有 `topic_id` 被传递给了 `cook` 方法。我或许可以检查主题的 `posts_count` 属性，但这在重新烘焙时将不起作用。

也许我不应该在 markdown-it 进程中使用任何状态？

另一种实现此目的的方法是生成一个使用 Markdown 的占位符，然后手动更新预览并在服务器端监听一些 cook 后处理事件，但这可能需要一些额外的工作。

如果可能的话，我更倾向于第一种方法。感谢任何建议。

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [2023年八月28日 20:59 UTC](https://meta.discourse.org/t/how-to-limit-some-of-markdown-features-for-first-post/276939/2 "2023-08-28T20:59:12Z")

</div>

我不知道，但你用 HTML 做什么？它甚至允许使用 Markdown，对吧？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年八月29日 00:37 UTC](https://meta.discourse.org/t/how-to-limit-some-of-markdown-features-for-first-post/276939/3 "2023-08-29T00:37:31Z")

</div>

> [@hawm](#):
>
> 我想限制主题的第一个帖子中的一些 markdown 功能，该帖子来自我的插件。

您编写了一个插件，该插件生成的文本您不希望被渲染？

您能多说一些您想做什么吗？

---

<div class="post-metadata">

### Author: ![hawm](https://avatars.discourse-cdn.com/v4/letter/h/f07891/32.png) [@hawm](https://meta.discourse.org/u/hawm)
#### Post date: [2023年八月29日 01:09 UTC](https://meta.discourse.org/t/how-to-limit-some-of-markdown-features-for-first-post/276939/4 "2023-08-29T01:09:21Z")

</div>

@Jagster @pfaffman  
请想象一下，该插件添加了一些自定义的BBCode标签，或者用自定义的HTML标签包装任何文本以供以后使用，例如进行装饰。我不想让它在第一篇帖子之外（或基于其他条件）生效，因为我不需要它，而且它可能会产生一些副作用。

另外，我可能在服务器端找到了一个可能的解决方案。它包装了Post模型的`cook`方法。我还没有测试过。

```ruby
class ::Post
  # 包装原始的cook方法以添加功能选项
  # 请参阅 lib/pretty_text.rb 中的 markdown 方法
  alias_method :original_cook, :cook
  def cook(raw, opts = {})
    features = {
      'feature-name': is_first_post?
    }

    if opts.has_key?(:features)
      opts[:features].merge!(features)
    else
      opts[:features] = features
    end

    original_cook(raw, opts)
  end
end

```
