Embed Discourse comments on another website via Javascript

Полагаю, это уже возможно. Свойство embed_url можно установить при первом создании темы. Наш плагин для WordPress делает это здесь: wp-discourse/lib/discourse-publish.php at main · discourse/wp-discourse · GitHub. Свойство embed_url нельзя обновить через API после создания темы.

3 лайка

Это замечательно! Похоже, документацию по API нужно обновить!

Что потребуется, чтобы добавить это свойство в метод обновления API? Это позволило бы мне решить проблему должным образом.

4 лайка

Привет! У меня возникли трудности с тем, чтобы связать посты в моём блоге с постами на форуме, используя этот метод. Похоже, у меня та же проблема, что и у некоторых других пользователей здесь, — речь идёт о политике безопасности контента (CSP) для iframe. Мой блог сгенерирован через Jekyll и размещён на GitHub, а мой Discourse — на Digital Ocean. Их адреса: blendertube.com и forum.blendertube.com соответственно.

Вот ошибка, которую показывает мой браузер:

Отказано во встраивании ‘forum.blendertube.com/’, так как предок нарушает следующую директиву политики безопасности контента: “frame-ancestors ‘self’ blendertube.com”.

Не связано ли это с SSL для моего экземпляра Discourse?

Вот несколько скриншотов:

Надеюсь, вы сможете помочь. Спасибо!

1 лайк

Вот ещё один скриншот:

1 лайк

У кого-нибудь есть идея, какой синтаксис использовать, чтобы заменить “current_page.url” на URL страницы продукта WordPress WooCommerce? Мы хотим сделать это, чтобы не настраивать код для каждой страницы вручную и легко применить его ко всем страницам.

Я пробовал заменить наше собственное значение домена для discourseEmbedUrl: 'http://eviltrout.com<%= current_page.url %>', но это не сработало в WP.

1 лайк

Думаю, нам здесь может понадобиться новый тег noindex, indexifembedded

Редактирование @codinghorror счел это хорошей идеей, когда она была предложена для похожего случая (встраивание темы)

2 лайка

Не могу понять, возможно ли следующее и как это сделать:

Когда тема по умолчанию для экземпляра Discourse — тёмная, как встроенная может быть светлой?

Если с моими браузерами всё в порядке, то похоже, что у @codinghorror реализация именно такая. Как это можно сделать элегантно? :smiley:

2 лайка

Обратите внимание: если кто-то ещё попробует это сделать, то discourseEmbedUrl у меня не работал при попытке встраивать темы напрямую в соответствующие уроки Thinkific LMS, зато метод topicId сработал.

1 лайк

Я использовал эту функцию для встраивания комментариев Discourse на наш блог. Сначала всё работало отлично. Недавно я заметил, что в новых блогах (<1 год :rofl:) возникла проблема: слаг не создаётся корректно, как в этом случае, что приводит к некорректной гиперссылке.

Метод генерации слага установлен в ascii, а разрешённый хост — www.gyandhan.com.

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'https://discussions.gyandhan.com/',
                     discourseEmbedUrl: '<%= request.original_url.split('?').first%>' };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

Повторяя очевидное, но проблема, которую я наблюдаю, заключается в том, что темы, созданные через встраивание, не содержат ни слага, ни заголовка. Я до сих пор не понимаю, почему возникает эта проблема.

1 лайк

Всем привет, извините, если это глупый вопрос.

Судя по тому, что я вижу, встроенный интерфейс позволяет читать лишь некоторые посты в теме, но не взаимодействовать с ними на самом сайте, верно? При попытке загрузить больше комментариев, ответить или кликнуть на профиль вас перекидывает обратно на Discourse.

Существует ли версия встроенного интерфейса, которая работает полностью на стороннем сайте (не на Discourse)?

Когда мой сайт переключается между тёмным и светлым режимом, как можно уведомить встроенную часть о необходимости сменить цветовую схему?

Я настроил разрешенные хосты для встраивания следующим образом:

Однако при попытке добавить класс для тела iframe я обнаружил, что iframe.contentDocument равен null. Если же использовать document.getElementById("discourse-embed-frame").contentWindow.document, возникает ошибка, показанная ниже:
image

Как можно указать конкретную строку на сайте, встраивающем iframe для Discourse, чтобы она использовалась в качестве заголовка (или хотя бы части URL-адреса) создаваемой темы? У меня есть URL-адреса для встраивания вида example.com/12345 с текстовым содержимым, и в итоге темы формируются на основе слов из этого содержимого, тогда как я хочу, чтобы использовалось значение «12345».

Разве оно не читает тег <title> из документа?

А, это имеет смысл. Мои заголовки более сложные, чем “12345”, и могут со временем меняться, тогда как “12345” останется стабильным. Поэтому я бы предпочел использовать именно его.

Я немного протестировал: парсер действительно берёт содержимое из <title>текст</title>. Если установить <title>12345</title> и переопределить его для обычных пользователей с помощью <script>document.title = "fancy title";</script> в конце HTML-документа, всё работает корректно. Созданный тред использует «12345» в качестве заголовка и URL-слаг, в то время как обычные пользователи видят красивый заголовок на странице, где происходит встраивание.

Спасибо за подсказку!

2 лайка

Всем привет,

Подскажите, можно ли получать посты из любой темы по тегу #?
Например, на основном сайте (не на Discourse) у нас есть страница, определяемая её названием, назовём её «Моё шоу» (/myshow).

Аналогично, в нашем экземпляре Discourse у нас много тем о «The Show», у них одинаковый хештег #theshow, и люди могут навигировать по ним по мере прохождения сезонов или событий.

Идея в том, чтобы получать последние посты из всех тем с тегом #theshow. Возможно ли это?

Наиболее близкое решение — получение всех тем, отсортированных по активности, под определённым тегом. См. Embedding a list of Discourse Topics in another site.

2 лайка

Как предотвратить появление первого поста в комментариях, встроенных как в блоге Джеффа?

РЕДАКТИРОВАНИЕ: Я использовал arivanandan/discourse-embed-complete: Включает первый пост при встраивании Discourse :slightly_smiling_face:

Что делать, если я хочу встроить комментарии нескольких тем на одну страницу? Как это сделать?