Баннеры уведомлений

Привет, @gormus, при попытке установки я получаю эту ошибку:

Произошла ошибка: Ошибка создания загружаемого актива: splide_css. Исходное имя файла: Извините, файл, который вы пытаетесь загрузить, не авторизован (разрешенные расширения: wasm, jpg, jpeg, png, woff, woff2, svg, eot, ttf, otf, gif, webp, avif, js).

Обновление: Всё сработало, я просто забыл добавить CSS в список разрешенных расширений.

3 лайка

Я добавил два баннера в одну точку продаж и выбрал для обоих режим карусели. Но они отображаются друг над другом. Не упустил ли я что-то для работы карусели?

1 лайк

Привет, @manuel! Чтобы карусель работала, в одном и том же месте должны быть как минимум два баннера; и, конечно же, опция Отображать в карусели должна быть включена для всех баннеров. Карусель не отобразится, если включен только один баннер.

Также:

  1. Видите ли вы какие-либо ошибки JavaScript в консоли браузера? Указывают ли они на баннеры уведомлений?
  2. Учитывая возможный конфликт, смогли ли вы изолировать проблему с баннерами уведомлений, отключив другие темы, компоненты и плагины? Или с помощью безопасного режима?

Или, если не возражаете, поделитесь настройками? Тогда я смогу импортировать их и попробовать у себя…

  1. На странице администрирования Discourse Notification Banners нажмите кнопку Редактор настроек в нижней части страницы.
  2. Скопируйте данные в формате JSON.
  3. Удалите любые конфиденциальные данные, если они есть.
  4. Поделитесь данными JSON в ответе здесь или отправьте мне в личные сообщения.
2 лайка

Спасибо @gormus! Я немного растерян, почему это не сработало… Я настроил это на двух независимых экземплярах, и это не работало ни на одном из них. Теперь я начал заново с нуля, и это работает на обоих! :+1: :upside_down_face:

2 лайка

Привет! Что касается аудитории, кажется, невозможно таргетировать только пользователей TL0, верно? Потому что все они TL0?

1 лайк

Боюсь, вы правы, @patrickemin. Уровни доверия суммируются, и в итоге все авторизованные пользователи по умолчанию попадают в TL0, даже если их вручную повысили до TL4.

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

Думаю, я обновлю логику для поля «Аудитория» и определю новое правило для всех уровней доверия. Спасибо за идею : )

2 лайка

Привет, @gormus! Я следовал вашим заметкам здесь относительно вашего ответа для nolo, но по какой-то причине мне не удаётся заставить уведомления работать в виде карусели. Они просто отображаются как стопка сообщений. У меня есть два тестовых сообщения, для обоих включена карусель, и они находятся в одном и том же слоте. В консоли нет ошибок, связанных с JS. Я отключил все остальные компоненты, но ничего не работает. Есть какие-то идеи?

Привет @marksalter, похоже, вы уже проверили основных подозреваемых. Единственное, что я могу предложить, — попытаться воспроизвести проблему, используя ваши экспортированные настройки. Пожалуйста, отправьте файл экспорта в личные сообщения, при необходимости обезличив данные. Однако я не вернусь ещё 10 дней : )

Привет! У меня возникла ошибка при обновлении сообщения о баннерах:

Свойство указателя JSON «/0/enabled_groups» должно быть массивом допустимых идентификаторов групп.

Не случилось ли так, что в поле «Аудитория» есть ссылка на удалённую (или переименованную) группу пользователей?

1 лайк

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

1 лайк

Я обдумываю эту идею для более точного таргетинга аудитории с использованием уровней доверия:

Кажется, у меня есть решение, которое вы сможете проверить.

Однако я рекомендую сначала протестировать это в непроизводственной среде, так как это вносит разрушающие изменения.

Для установки этой версии используйте ветку staging плагина Notification Banners:

Разрушающее изменение

При оценке видимости баннера на основе значений поля «Аудитория» все роли посетителя trust_level_*, кроме роли с наивысшим уровнем, игнорируются.

Например, если у пользователя есть следующие роли: support_team, blog, trust_level_0, trust_level_1 и trust_level_2.

Поле «Аудитория» будет учитывать, что у пользователя есть только роли support_team, blog и trust_level_2.

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

Я также обновил описание поля «Аудитория», чтобы прояснить это изменение.

Я планирую продолжить тестирование этих изменений и, вероятно, выпустить новую версию к концу сентября. Буду признателен за любой ваш отзыв.

Спасибо!

2 лайка

v1.3.0 уже выпущена.

Обязательно протестируйте её перед развёртыванием в production.

Значимые изменения:

  • Баннеры теперь сортируются так же, как отображаются на странице настроек. Вместо поля «Порядок отображения» теперь можно сортировать баннеры с помощью нативных кнопок перемещения.

  • Изменено поведение поля Аудитория:

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

    Чтобы показать всем пользователям и посетителям: выберите группу everyone.

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

  • Изменены параметры слайдера Splide по умолчанию:
    до:

    { "arrows": false, "autoHeight": true, "autoplay": true, "direction": "ttb", "focus": "center", "height": "15vh", "gap": 0, "type": "loop" }
    

    после:

    { "autoHeight": true, "height": "8rem", "arrows": false, "autoplay": true, "direction": "ttb", "focus": "center", "gap": 0, "type": "loop" }
    
2 лайка

Привет, последнее обновление сломало мой сайт (загружается только заголовок сайта), пришлось отключить TC, и всё вернулось в норму. Посмотрим, только ли у меня такая проблема, спешить некуда :grinning_face_with_smiling_eyes:

1 лайк

Спасибо за отчет, @patrickemin, и за предоставленные детали.

Хотфикс (v1.3.1), который я развернул ранее, должен был исправить проблему, которую я допустил в версии v1.3.0. Приношу извинения всем, кто столкнулся с этой проблемой.

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

Я почти уверен, что настройки параметров указаны верно. Я также пробовал все три места, где должен отображаться тестовый баннер. Ничего не вышло.

Это другая ошибка или проблема на моей стороне? Где стоит поискать?

Вы случайно не заметили ошибок в консоли?

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

Только предупреждения об устаревании. Кроме того (но только в Opera, не в Firefox, и я уже давно установил Content security policy script src в 'unsafe-eval'):

Политика безопасности контента вашего сайта блокирует использование ‘eval’ в JavaScript

Политика безопасности контента (CSP) предотвращает выполнение произвольных строк как JavaScript, чтобы затруднить злоумышленнику внедрение несанкционированного кода на ваш сайт.

Чтобы решить эту проблему, избегайте использования eval(), new Function(), setTimeout([строка], ...) и setInterval([строка], ...) для вычисления строк.

Если это абсолютно необходимо: вы можете включить вычисление строк, добавив unsafe-eval в качестве разрешенного источника в директиву script-src.

Спасибо. Я также могу опубликовать это здесь, так как в данный момент у меня активен только один тестовый баннер:

[
	{
		"setting": "banners",
		"value": [
			{
				"title": "Testbanner Titel",
				"message": "Testbanner Text Testbanner Text",
				"date_after": "2025-11-01 12:00:00Z",
				"date_before": "2025-12-01 12:00:00Z",
				"dismissable": true,
				"plugin_outlet": "top-notices",
				"enabled_groups": [
					1
				]
			}
		]
	},
	{
		"setting": "splide_options__above_site_header",
		"value": "{ \"autoHeight\": true, \"height\": \"8rem\", \"arrows\": false, \"autoplay\": true, \"direction\": \"ttb\", \"focus\": \"center\", \"gap\": 0, \"type\": \"loop\" }"
	},
	{
		"setting": "splide_options__below_site_header",
		"value": "{ \"autoHeight\": true, \"height\": \"8rem\", \"arrows\": false, \"autoplay\": true, \"direction\": \"ttb\", \"focus\": \"center\", \"gap\": 0, \"type\": \"loop\" }"
	},
	{
		"setting": "splide_options__top_notices",
		"value": "{ \"autoHeight\": true, \"height\": \"8rem\", \"arrows\": false, \"autoplay\": true, \"direction\": \"ttb\", \"focus\": \"center\", \"gap\": 0, \"type\": \"loop\" }"
	}
]

Я также пробовал без дат начала и окончания и для двух других выходов плагинов. Кроме того, я пробовал использовать everyone вместо Administrators (здесь в настройках это должна быть группа 1), чтобы увидеть эффект в Firefox без входа на сайт. И я не вносил изменений в параметры splide.

1 лайк

Спасибо за отчет @Roi.

В вашей конфигурации не было выбрано ни одной категории, и NB ошибочно запрещал доступ к баннеру.

Я только что внес исправление и выпустил версию v1.3.2. Пожалуйста, обновите баннеры уведомлений.

1 лайк

Да, отлично, теперь всё работает!

И да, я оставил выбор категорий пустым, так как думал, что в этом случае баннер будет отображаться везде. Получается, что это был баг в компоненте, который требовал указания опции? В любом случае, теперь всё исправлено. Спасибо! :slight_smile:

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

Я хочу уведомлять/напоминать нашим пользователям об участии в жизни сообщества. Идея заключалась в том, чтобы раз в 4–8 недель показывать баннер, чтобы снова и снова напоминать пользователям. Как только пользователь закрывает баннер, он больше не отображается. Пока всё хорошо.

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

Кто-то ранее упоминал здесь в теме о цикле. То есть показывать баннер каждые 8 недель. Это была бы отличная опция, так как она полностью не требует обслуживания — если вы не хотите менять что-то другое. Но остаётся вопрос: появится ли баннер снова для пользователей, которые закрыли его при начале нового цикла?