Устаревание компонента темы Search Banner

За последние несколько месяцев мы работали над функцией баннера приветствия, которая является частью основного продукта Discourse. Этот базовый баннер приветствия обращается к новым и возвращающимся посетителям вашего сообщества и облегчает им поиск контента, соответствующего их потребностям и интересам. С появлением этого нового базового баннера мы теперь отказываемся от компонента темы «Баннер поиска», чтобы упростить наши предложения продуктов и обеспечить всем пользователям Discourse выгоду от непрерывных улучшений базовой функции.

В этой теме мы рассмотрим, что означает отказ от поддержки для текущих пользователей компонента темы «Баннер поиска».

Если вы клиент с хостингом…

Мы начнем миграцию клиентов с хостингом с компонента «Баннер поиска» на функцию «Баннер приветствия» 20 ноября 2025 года. Если вы в настоящее время используете этот компонент, вы получите сообщение с точными деталями времени для вашего тарифного плана.

Эта миграция перенесет все тексты сайта, которые вы обновили для компонента темы (то есть search_banner.headline, search_banner.subhead, search_banner.search_button_text), а также значения настроек компонента темы «показывать на», «плагиновый выход» и «фоновое изображение» в настройки базовой функции.

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

После этой миграции компонент темы будет отключен и его можно будет безопасно удалить со страницы Темы и компоненты (/admin/config/customize/components).

Если вы пользователь с самостоятельным размещением…

Вам следует запланировать самостоятельную миграцию с компонента темы на базовую функцию к 15 декабря 2025 года. Вы можете сделать это вручную или с помощью предоставленного нами скрипта.

Ручная миграция

Ниже приведена карта того, как тексты сайта и настройки компонента темы «Баннер поиска» соотносятся с аналогичными функциями базового баннера приветствия:

Описание настройки Компонент темы «Баннер поиска» Базовая функция «Баннер приветствия»
Текст заголовка, отображаемый на баннере приветствия. Текст сайта search_banner.headline Тексты сайта js.welcome_banner.header.anonymous_members и js.welcome_banner.header.logged_in_members
Текст подзаголовка, отображаемый на баннере приветствия. Текст сайта search_banner.subhead Тексты сайта js.welcome_banner.subheader.anonymous_members и js.welcome_banner.subheader.logged_in_members
Текст, используемый для кнопки поиска на баннере. * Текст сайта search_banner.search_button_text Текст сайта js.welcome_banner.search_placeholder
Настройка для определения страниц, на которых отображается баннер приветствия. Настройка компонента темы «показывать на» Настройка сайта «Видимость баннера приветствия»
Настройка для определения места на странице, где появляется баннер приветствия. Настройка компонента темы «плагиновый выход» Настройка сайта «Расположение баннера приветствия»
Фоновое изображение, используемое на баннере приветствия. Настройка компонента темы «фоновое изображение light» Настройка сайта «Изображение баннера приветствия»

* Обратите внимание, что базовая функция «Баннер приветствия» не поддерживает явную кнопку поиска, поэтому мы рекомендуем сопоставить этот текст с настраиваемым текстом-заполнителем поля поиска для получения похожего результата.

Миграция с помощью скрипта

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

  1. Миграция настроек компонента:
    themes:advanced_search_banner:1_migrate_settings_to_welcome_banner
  2. Миграция переводов компонента:
    themes:advanced_search_banner:2_migrate_translations_to_welcome_banner
  3. Включение базового баннера, исключение компонента из тем, где он используется, и отключение компонента:
    themes:advanced_search_banner:3_exclude_and_disable

Файлы <random_name>.sh для запуска в контейнере:

  1. task_1.sh:
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:1_migrate_settings_to_welcome_banner
  1. task_2.sh:
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:2_migrate_translations_to_welcome_banner
  1. task_3.sh
#!/bin/bash

cd /var/www/discourse && rake themes:advanced_search_banner:3_exclude_and_disable

Рекомендуется запускать каждую задачу rake отдельно для лучшего контроля над процессом миграции.

Также доступна вспомогательная задача themes:advanced_search_banner:migrate_all для последовательного выполнения всех трех задач, но используйте её на своё усмотрение.

9 лайков

Вы имеете в виду что-то вроде этого?

#!/bin/bash
cd /var/www/discourse && rake themes:advanced_search_banner:migrate_settings_to_welcome_banner  && rake themes:advanced_search_banner:migrate_translations_to_welcome_banner &&  rake themes:advanced_search_banner:exclude_and_disable

Я не думаю, что многие пользователи с самостоятельным хостингом поймут это из <task_1_2_or_3>.

Вероятно ли, что эти rake-задачи завершатся ошибкой? Можно ли просто запустить их все сразу? Если да, то почему бы не создать одну rake-задачу, которая выполняет всё?

Возможно, кому-то нужно что-то вроде этого:

docker exec -t app bash -c `cd /var/www/discourse && rake themes:advanced_search_banner:migrate_settings_to_welcome_banner  && rake themes:advanced_search_banner:migrate_translations_to_welcome_banner &&  rake themes:advanced_search_banner:exclude_and_disable`

Так что для тех, кто не понимает, как это сделать, все старые настройки и пользовательский текст будут потеряны, верно?

А как насчет тех, кто не будет обновляться до марта? Они всё ещё смогут запустить эти rake-задачи тогда? Я не совсем понимаю, в чём важность 15 декабря.

3 лайка

Я передам ваш первый вопрос коллеге, который создал скрипт, а по поводу двух последних вопросов:

Нет.

Скрипт — это один из вариантов; ручная миграция — другой. Именно поэтому мы предоставили очень четкие описания того, как настройки и строки компонента темы сопоставляются с настройками и строками приветственного баннера.

15 декабря мы завершим миграцию размещенных клиентов и официально прекратим поддержку / обслуживание компонента Search Banner. Мы рекомендуем другим пользователям этого компонента выполнить миграцию до этой даты, чтобы они не оказались застигнутыми врасплох, когда компонент темы станет несовместимым с ядром Discourse в будущем.

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

5 лайков

Верно, приведённая команда выполнит все три задачи последовательно. Обратите внимание, что мы добавили префикс с номером к каждой задаче, чтобы указать порядок выполнения.

Спасибо, мы обновили раздел Миграция скрипта, чтобы сделать его более понятным.

Мы не можем гарантировать 100% успех, но сделали всё возможное, чтобы ошибки были крайне маловероятны.

Да, мы добавили удобную задачу: themes:advanced_search_banner:migrate_all.

3 лайка

Отлично! Думаю, это очень поможет. Такие люди, как мы, не против запускать несколько задач по сбору данных внутри контейнера, но большинство тех, кто разворачивает решения самостоятельно, — уже нет.

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

Что я хотел бы сделать, так это найти способ определить, установлен ли компонент темы, предпочтительно через API. Думаю, для этого нужно будет получить JSON-файл компонента темы, обработать его через jq и отфильтровать по имени компонента. Думаю, это сработает, и у моей панели управления есть API-ключ. Тогда я смогу запустить задачу Rake внутри контейнера с помощью Ansible!

3 лайка

Изменены ли официальные темы, которые автоматически устанавливают компонент, заранее, чтобы никто не устанавливал компонент, не осознавая, что для работы темы в будущем необходимо вручную настроить приветственный баннер в ядре?

3 лайка

Просто к сведению: я выполнил rake-задачи, как описано, и всё, похоже, прошло по плану.

rake.txt.md (3.1 КБ)

2 лайка

Все официальные темы, которые использовали баннер поиска, были обновлены и переведены на использование баннера приветствия:

4 лайка

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



Затем я переключил язык интерфейса на язык форума по умолчанию (немецкий), и кажется, что эти тексты не изменились.



Является ли это ожидаемым результатом миграции? Я не нашел никаких логов, которые указывали бы на то, что это я редактировал тексты; поэтому я предполагаю, что это результат миграции. Но я не совсем понимаю, почему это изменило только один язык, но не другие. Тем более что локаль по умолчанию не была перенесена.

Да, скрипт миграции был разработан для переноса текстов поискового баннера по умолчанию в основные тексты баннера приветствия.

Почему тексты были перенесены?

Миграция была выполнена, потому что поисковый баннер был установлен с темой Air — скрипт не проверяет, отключена ли родительская тема (в вашем случае — тема Air), что является ошибкой в логике скрипта.


Скрипт миграции поддерживает несколько локалей, если они настроены: ссылка на исходный код.

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

Как автор скрипта миграции, я приношу извинения за это упущение, которое могло повлиять на плавность миграции. Если я упустил что-то в вашем сообщении, боюсь, что не смогу оказать более существенной помощи, так как я больше не являюсь частью основной команды. Если вам всё ещё нужна помощь по этому вопросу, человек, выполнивший миграцию 2025-12-15, должен быть в состоянии помочь.

1 лайк

:thinking: Но почему я вижу немецкие тексты в компоненте темы? Это стандартные переводы, которые были добавлены более года назад.

Так что я всё ещё не совсем понимаю разницу между английским и немецким. Единственный язык, в котором тексты сайта, похоже, переопределены, — это английский. Нет ни испанского, ни французского, ни китайского, но компонент поискового баннера был переведён на все эти языки.

1 лайк

Тем временем я попытался глубже разобраться в поведении системы и попросил ChatGPT пройтись по логике миграции. Насколько я могу судить, если отсутствуют переопределения переводов, миграция не определяет локаль и поэтому возвращается к английскому языку. Это объясняет, почему тексты на английском были изменены.

Что я до сих пор не понимаю, так это то, почему в качестве fallback не использовалась локаль по умолчанию форума или почему миграция не переносила последовательно все локали или ни одну. С точки зрения пользовательского опыта было бы более последовательно, если бы все пользователи видели либо новый текст приветственного баннера, либо старый текст поискового баннера, независимо от языка их интерфейса.

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

2 лайка

Привет @Moin, извините за долгую задержку с нашим ответом, пока мы разбирались в этом вопросе.

Компонент Search Banner поставлялся с встроенными переводами для многих языков (немецкий, испанский, французский, китайский и др.) в своих файлах локализации. Они не хранились как TranslationOverrides в базе данных — они были частью самого компонента. Скрипт миграции из Search Banner → Welcome Banner переносит только TranslationOverrides (пользовательские тексты сайта, которые администраторы явно задали), а не встроенные переводы компонента темы. Именно это вы и видели здесь:

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

2 лайка

Я понимаю эту часть. Это объясняет, почему немецкие тексты не были перенесены.

Но тогда почему были перенесены английские тексты, которые я не менял? Если бы переносились только переопределённые тексты, то и они не должны были бы быть перенесены. В результате у нас был бы последовательный баннер приветствия, где каждый пользователь видит новые тексты, а не такой, где почти все видят новые тексты, за исключением англоязычных пользователей, которые получают текст по умолчанию из Search Banner.

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

1 лайк