Встраивание целого форума Discourse на другой сайт в iframe

Об этом уже обсуждалось в двух других темах, но они закрыты:

Некоторые считают, что вместо этого следует поработать над ребрендингом Discourse, чтобы он соответствовал дизайну существующего сайта.

По опыту скажу: это очень сложно реализовать. Разметка и CSS для неё крайне сложны в работе и негибки. Например, деревья DOM в заголовке Discourse и в основном контенте сильно различаются. Вставка содержимого заголовка (встроенный редактор Discourse) приводит к тому, что вставленный контент оказывается далеко от реального заголовка Discourse.

Поверьте, просто «заставить ваш Discourse следовать теме вашего основного сайта» — задача не из лёгких.

Что я хотел бы попробовать дальше, так это встроить Discourse в <iframe>. Посмотрим, как это сработает.


Предложение по улучшению! Было бы здорово, если бы Discourse можно было использовать как набор пользовательских элементов. Например:

<!-- ... какая-то пользовательская разметка ... -->

<discourse-actions backend="http://url.to/actual/discourse/instance">

<!-- ... какая-то пользовательская разметка ... -->

<discourse-main backend="http://url.to/actual/discourse/instance">

Это позволило бы встраивать части Discourse в любом месте сайта, а элементы подключались бы к указанному бэкенду.

При прямом переходе по адресу http://url.to/actual/discourse/instance Discourse открывался бы как обычно — в виде отдельного веб-приложения.

По сути, это сделало бы части Discourse используемыми в рамках общих HTML-структур (как частичные шаблоны Handlebars, но с перспективой на будущее и на основе веб-стандартов).

Только представьте, что ещё стало бы возможным с такой функцией (подумайте, например, о том, когда пользовательские элементы имеют разные значения атрибутов backend)…

Мы, безусловно, не можем помешать вам попробовать запустить Discourse во фрейме (iframe), но, как предупреждалось в других темах, это, как ожидается, будет ненадежным и проблемным решением… и мы не планируем тратить время на решение проблем, связанных с iframe.

Возможно, будет более продуктивно подробно описать проблемы, с которыми вы сталкиваетесь при создании тем для Discourse, чтобы мы могли помочь и/или улучшить этот процесс. За последние несколько лет мы значительно улучшили систему тем, и это направление, которое мы определенно хотим поддерживать и развивать по мере возможности.

Некоторые элементы, безусловно, сложнее кастомизировать, чем другие; заголовок (header) — один из них. Это связано с тем, что для повышения производительности была внедрена виртуальная DOM (A tour of how the Widget (Virtual DOM) code in Discourse works).

Поэтому, если вы хотите вставить контент в заголовок, вам необходимо использовать эту систему, а не добавлять контент до/после него через административный интерфейс (немного об этом рассказано в разделе продвинутого pluginAPI по ссылке Developing Discourse Themes & Theme Components). Также существуют хорошие примеры манипулирования содержимым заголовка в существующих компонентах тем (#theme-component), например, в Custom Header Links.

Это было бы здорово иметь, и я вижу, что это всё ещё не работает: когда я пытаюсь, я просто получаю