Opening a reply window via URL

Hi All,

I know that we can create a new topic via url with special param.
But I want my users to click a link to reply a specific topic. Is there a way to add special params in the url query to auto open reply window for my users? If not, is there a way I can do this?

5 лайков

Yes, @techapj added this a while ago, details are here:

1 лайк

Hi Jeff,

Thank you for your reply, but what I want is that I want my users to reply
a topic which has already been created by others.
eg. I have a topic A in my forum, and I want every user click this link to
reply under topic A, not to create another topic.

What I want is when I open this link, the reply window popup, I want this
action equals to click the “reply” button under a topic.

1 лайк

It has been a while and I haven’t found a way to do it.
I just want to be able to create a link that when clicked opens a specific topic with the reply box activated and with the focus on it.

Something like:
https://meta.discourse.org/t/how-to-open-reply-window-via-url/#reply

Anyone knows how can it be achieved?
Thanks,

2 лайка

What I posted above works, but remember you don’t need to be on a specific topic to reply to it.

If your requirement is “must navigate to topic page, and then open the composer to reply”, then we don’t have that… but again it’s not required, you can reply to any topic from any other topic (or any location in the Discourse app, in fact) in the composer.

That post only mentions new-topic, where is the handy url to post a reply?

I believe there is one, cc @techAPJ

I’m aiming to use that link outside of Discourse. For example, putting a link on my blog, and when clicked it opens a new tab and starts a reply on a particular topic of the forum.

Is there a way to do it?

Thanks for your help.

Yes, the answer above works as you describe. Perhaps @techapj can help me explain because I seem to be failing at explaining this at the moment.

2 лайка

The feature we have right now only supports creating new topic via URL.

What @magoz wants is to have a URL for an existing topic that will open composer and user can start replying on that topic as soon as they visit that URL. This is currently not available and is not on my list right now.

Should we add support for this feature?

8 лайков

Not sure about it seems very uncommon

3 лайка

My bad @magoz I was indeed misunderstanding. I could have sworn we had a pre-filled reply URL though.

3 лайка

Apologies for my late reply.

Opening the composer (in a blank state) from an URL would be useful for those who have external websites working with Discourse and ask their users to reply to a particular Discourse topic.

For instance, I have a private website where I teach online lessons. I ask my students to reply to specific discourse topics to introduce themselves, to post their homework, etc.

It would be nice to be able to add something like ?reply at the end of any topic’s URL, and share that link with them.

For example:

<a href="https://meta.discourse.org/t/how-to-open-reply-window-via-url/44781?reply">link</a>

It would open a new reply to that topic with the composer open.

7 лайков

I would love to see it, too. Including template-support for answers, so it’s not just for topics :slight_smile:

6 лайков

Возможно ли это сейчас?

Мы тоже очень хотели бы увидеть эту функцию :folded_hands: Значительно ли усложнит работу её реализация, если она ещё не реализована?

Некоторые участники нашего сообщества — лидеры мнений или эксперты в узких областях (SME), которые проводят прямые трансляции на YouTube. Это приемлемо (в лучшем случае) для сессий вопросов и ответов, но ужасно подходит для более глубоких обсуждений.

Мы хотим иметь возможность направлять пользователей к публикации своих вопросов в существующую тему события (где мы используем плагин событий), чтобы окно ответа открывалось автоматически, и гарантировать, что люди с вопросами будут обращаться именно к теме соответствующего эксперта.

Одно из наших главных преимуществ для многих партнёров, с которыми мы работаем, — это предоставление платформы для более глубокого взаимодействия с их пользователями.

Когда они проводят прямые трансляции на YouTube или Facebook, они лишь ЗАПУСКАЮТ разговор. Discourse — идеальный инструмент для его ПРОДОЛЖЕНИЯ.

Если бы мы могли упростить процесс, предоставив прямую ссылку, по которой пользователи смогут кликнуть, при этом окно ответа открывалось бы автоматически, а в него уже был бы вставлен некоторый шаблонный текст, это было бы невероятно полезно!

2 лайка

То же самое. Это было бы очень полезно для нашего сообщества.

1 лайк

Я использую для этого простой компонент темы в своём экземпляре. Ниже приведена адаптация моего кода — он также поддерживает #upload (открытие окна загрузки при создании нового ответа на рабочем столе) и #edit (для авторов вики-статей), в дополнение к #reply.

Его ещё нужно доработать, например, избежать использования setTimeout и правильно управлять draftSequence (я не думаю, что topic.draft_sequence является правильным), и я не знаю, что было бы лучшей практикой в данном случае. Тем не менее, у меня это работает нормально.

Переход к любой теме, например /t/[slug]/[id]#reply, откроет композитор с новым пустым ответом.

Если вам нужен заранее заполненный текст, это можно реализовать, установив атрибут reply в объекте, передаваемом в composer.open. Кроме того, если для этой темы уже есть черновик, система спросит, хотите ли вы сохранить или отменить его перед созданием нового ответа — draftSequence должен быть корректным, если желаемое поведение — продолжение работы с этим черновиком.

<script type="text/discourse-plugin" version="0.4">
  if (/.*#reply$/g.test(document.URL)) {
    const { REPLY } = require('discourse/models/composer').default;
    
    const composer = Discourse.__container__.lookup('controller:composer');
    
    setTimeout(function() {
      const topic = Discourse.__container__.lookup("controller:topic").get("model");
      if (topic) {
        composer.open({
            action: REPLY,
            draftKey: topic.draft_key,
            draftSequence: topic.draft_sequence,
            topic,
        });
      }
    }, 0)
  }
</script>

Надеюсь, это поможет.

13 лайков

Вы меняли или обновляли это с тех пор? Это было бы очень полезно — я только что нашёл для этого применение в своей установке:

предоставить пользователям удобный способ ответить на баннерную тему в один клик

1 лайк

Единственное изменение, которое я помню, — это принудительный поток входа, если пользователь еще не вошел в систему, что-то вроде:

        if (!Discourse.User.current()) {
            Discourse.__container__.lookup("route:application").send("showLogin");
        }

Я всё ещё использую это в своём сообществе, чтобы перенаправлять пользователей из моего React-приложения напрямую к этим процессам на Discourse (ответ, редактирование, загрузка и т. д.).

2 лайка