# Как оформить пост до его публикации?

**URL:** https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052
**Category:** Development
**Created:** [04.Март.2021 15:49:46 UTC](https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052 "2021-03-04T15:49:46Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Heddson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heddson/32/96742_2.png) [@Heddson](https://meta.discourse.org/u/Heddson)
#### Post date: [04.Март.2021 15:49:46 UTC](https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052/1 "2021-03-04T15:49:46Z")

</div>

Я создаю компонент темы и хочу изменить или украсить сообщения непосредственно перед их обработкой (cooking). Как можно получить доступ к необработанному тексту сообщения (для сообщения, которое вот-вот будет обработано и показано)?

Я прочитал «Руководство разработчика по темам Discourse» и узнал, что можно модифицировать обработанный текст с помощью методов pluginAPI: _decorateCooked_ и _decorateCookedElement_, а также _addPostTransformCallback_, но не нашёл способа получить текст до его обработки.

Также я изучил контроллеры и компоненты, но безрезультатно.

---

<div class="post-metadata">

### Author: ![spirobel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/spirobel/32/170908_2.png) [@spirobel](https://meta.discourse.org/u/spirobel)
#### Post date: [04.Март.2021 16:09:09 UTC](https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052/2 "2021-03-04T16:09:09Z")

</div>

Вам нужно использовать эту функцию:

> <https://github.com/discourse/discourse/blob/2123561125242a3c048958a56bd8bebe83cd577f/app/assets/javascripts/discourse/app/lib/plugin-api.js#L972>

которая заменит следующее:

> <https://github.com/discourse/discourse/blob/2123561125242a3c048958a56bd8bebe83cd577f/app/assets/javascripts/discourse/app/models/composer.js#L850>

так что вы сможете изменить пост до его сохранения.  
Всё, пока. 😃

---

<div class="post-metadata">

### Author: ![Heddson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heddson/32/96742_2.png) [@Heddson](https://meta.discourse.org/u/Heddson)
#### Post date: [04.Март.2021 16:24:37 UTC](https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052/3 "2021-03-04T16:24:37Z")

</div>

Спасибо за ваш ответ! Но я не хочу сохранять изменения текста, я хочу изменить его после сохранения, но перед отображением (и перед обработкой).

Причина в том, что я хочу, чтобы оригинальный текст появлялся, если пользователь редактирует пост. Я подозреваю, что если бы я использовал _composerBeforeSave_, то изменённый текст появлялся бы при редактировании (?).

---

<div class="post-metadata">

### Author: ![spirobel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/spirobel/32/170908_2.png) [@spirobel](https://meta.discourse.org/u/spirobel)
#### Post date: [04.Март.2021 16:47:08 UTC](https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052/4 "2021-03-04T16:47:08Z")

</div>

Если вы хотите реализовать это как тему, это будет ваш единственный вариант. Ввод пользователя (markdown) → обработка на стороне сервера на Ruby → (HTML) получение другими пользователями и возможное оформление. Это обещание будет вызвано перед нажатием кнопки «Сохранить» или «Ответить». Это не будет отображаться в черновиках, но вы правы: это появится, если вы отредактируете сообщение. Если вы хотите обойти это, вам нужно отменить изменения, которые вы вносите при сохранении, когда редактор открывается или переключается на отредактированное сообщение. Я мог бы рассказать подробнее, но вы также можете просто изучить код и провести собственные эксперименты.  
Удачи! 😃  
РЕДАКТИРОВАНИЕ: Я только что подумал об этом. Теоретически вы также могли бы выполнять обработку на стороне клиента. Но я считаю, что это плохая идея из-за производительности и других причин. Или просто создайте плагин: [(Superseded) Plugin Tutorial #1 - How to manipulate the text in the composer?](https://meta.discourse.org/t/plugin-tutorial-1-how-to-manipulate-the-text-in-the-composer/10925)

---

<div class="post-metadata">

### Author: ![Heddson](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heddson/32/96742_2.png) [@Heddson](https://meta.discourse.org/u/Heddson)
#### Post date: [05.Март.2021 10:21:37 UTC](https://meta.discourse.org/t/how-to-decorate-a-post-before-its-cooked/182052/5 "2021-03-05T10:21:37Z")

</div>

Изучу информацию о плагинах! Но, скорее всего, я просто изменю готовый пост (в точности то, что я говорил, что не хочу делать 😄).

Спасибо ещё раз!
