Я перенослю старый форум на Discourse, и на оригинальном сайте для одной из категорий была уникальная тема (включая уникальный логотип в шапке).
Мое текущее решение — это компонент темы, который выглядит примерно так:
CSS:
body.category-target-category{
///замените #hexcodes на значения цветов по вашему выбору
--primary: #primaryhexcode;
--secondary: #secondaryhexcode;
--tertiary: #tertiaryhexcode;
///продолжите для любых/всех необходимых значений цветов
}
HTML/JS:
<script type="text/discourse-plugin" version="0.2.0">
api.onPageChange(() =>{
var logo = document.getElementById("site-logo");
var categories = document.getElementsByClassName("category-target-category");
if(categories.length > 0)
{
logo.src = "category-specific-logo-url";
}
else
{
logo.src = "standard-logo-url";
}
});
</script>
В настоящее время мне приходится перебирать все возможные значения цветов, упомянутые в color_definitions.scss, чтобы переопределить их. Я полагаю, что значения для этого файла генерируются в foundation/color_transformations.scss, которые, в свою очередь, создаются на основе значений из foundation/colors.scss. Я знаю, что можно переопределить корневые значения цветовой темы либо через админ-меню, либо в about.json компонента темы, но, насколько я понимаю, эти изменения применяются ко всему сайту.
Существует ли более эффективный способ настроить конкретную категорию, кроме перечисления всех 100+ переменных в color_definitions.scss? Например, можно ли изменить файл foundation/colors.scss через компонент темы?
Если вы просто создадите новую тему, вы сможете добавить код и загрузить логотипы как ресурсы. <category-slug> — это название категории в нижнем регистре, которое отображается в адресной строке браузера (разделяйте родительские и подкатегории дефисами «-», например, parentcategory-subcategory).
Также существуют различные компоненты тем (#theme-component), подобные этому, которые вы можете найти:
Я очень ценю инструкции по CSS для логотипа. Это намного элегантнее, чем мой громоздкий скрипт.
Ваше решение точно подойдёт для моей задачи. Хотя выбор каждого элемента и прямое задание цвета для него кажется утомительным. Интересно, есть ли способ использовать механизм, который Discourse применяет для генерации своей цветовой палитры на основе примерно 12 базовых цветов из файла colors.scss. Думаю, для этого потребуется плагин, а не компонент темы, но это задача на другой день.