Я импортировал 80 000 сообщений из phpBB в Discourse. В сообщениях много изображений, ссылающихся на удалённые сайты, например [img]http://www.domain.tld/image.jpg[/img], которые больше недоступны.
В сообщениях в этих местах ничего не отображается, что вызывает недоумение, так как контекст в некоторых из них нарушается: непонятно, что между одним и следующим текстовым блоком было изображение.
Поэтому мой вопрос: возможно ли разместить там изображение-заглушку, если оригинальное изображение больше недоступно?
Нет, ничего не отображается. Но я приближаюсь к решению. Думаю, проблема в тегах BBCode . Если я отредактирую сообщение и удалю эти теги, оно будет выглядеть так.
Значит, мне нужно удалить все теги [img] BBCode и повторно обработать сообщения?
Это выглядит интересно. Думаю, мне тоже это понадобится. Спасибо!
Не уверен. Если вы удалите тег BBCode встроенный в строку, то URL изображения останется в виде обычного текста внутри вашего сообщения, и иконка битого изображения не появится.
Может быть, стоит попробовать удалить тег BBCode, но при этом вставить пустую строку до и после URL изображения. Сначала сделайте резервную копию!
Что мне нужно изменить, чтобы появилась иконка «битого» изображения — или удалённое изображение (если оно ещё существует, оно, вероятно, будет загружено)?
Не уверен.
У меня тоже должна была возникнуть эта проблема, так как я импортировал форум phpBB с тегами [IMG], и 95% изображений были битыми. Но, насколько я помню, после «запекания» битые встроенные изображения корректно заменялись значком битого изображения, даже если они были встроенными. Хотя могу ошибаться
Боюсь, у меня пока нет готового решения из коробки, но я уверен, что способ разобраться в этом найдётся.
Не случится ли у вас под рукой ссылка на сообщение, содержащее битое встроенное изображение? Не могли бы вы также скопировать и вставить его исходный текст?
Если вы проверите первый пост, то заметите большое пустое пространство между последней строкой текста и подписью. В исходном коде можно увидеть неработающие изображения, например:
У вас включена настройка скачивать удалённые изображения локально? Иконка битого изображения появляется только после того, как Discourse попытается загрузить удалённое изображение и не сможет этого сделать.
Я думаю, что в файле /var/discourse/shared/standalone/import/settings.yml есть настройка, позволяющая включить или отключить загрузку удалённых изображений, однако посты будут пересобраны после импорта независимо от значения этой опции.
Вместо того чтобы пересобирать множество постов, хорошим тестом будет ручное восстановление HTML конкретного поста через опции администратора, так как это запускает процесс пересборки:
А затем запустить задание UpdateHotlinkedRaw, добавив его в очередь:
Я проверил это на своём тестовом экземпляре, используя одно из ваших битых изображений внутри BB-кода. Когда опция загружать удалённые изображения локально была отключена, пустая строка оставалась. Когда она была включена, появился значок битого изображения.
Да, вы правы. Думаю, это была проблема кэша браузера после выполнения команды пересборки. Спасибо, что проверили сами!
Так что это как-то связано с импортом из phpBB. Клянусь, я не менял никаких настроек конфигурации, связанных с удалёнными изображениями, после импорта всего из phpBB…
А, круто. Я нашёл это и нажал.
Я не могу найти задачу UpdateHotlinkedRaw нигде в Sidekiq… Можете помочь мне разобраться. Уверен, это как-то связано с ошибкой пользователя (PEBCAK).
Это указывает на то, что я включил download remote images to localпосле импорта всего из phpBB. Хм… Так как у меня также была/есть тестовая установка, где я тестировал множество вещей, я всё ещё уверен, что эта опция уже была включена до этого.
Примечание: задача в любом случае будет запущена через несколько минут, переход в Sidekiq — это просто способ проверить всё быстрее.
Задача UpdateHotlinkedRaw должна появиться через несколько секунд после пересборки HTML вашего поста во вкладке Scheduled в Sidekiq.
Задача будет видна только если в настройках вашего форума Discourse включена опция загружать удалённые изображения локально и если ваш пост содержит изображение(я).
Если это не сработает, то на данный момент у меня нет других идей…!
Спасибо, теперь всё понятно. Я просто пересобрал любое сообщение — без удалённых изображений. Поэтому ничего не произошло.
И спасибо, вы помогли мне разобраться в ситуации. Теперь я вижу изображения-заглушки. И, скорее всего, заменю изображение-заглушку на ваш CSS-трюк, на который вы дали ссылку здесь.