Существует ли способ получить доступ к настройкам одного компонента темы из другого компонента темы? Кажется, что settings содержит только настройки того компонента темы, в котором он находится.
Если получить доступ к настройкам одного компонента темы из другого невозможно, какой будет лучший способ это сделать?
использовать один единственный компонент темы?
переместить настройки в основную тему (но доступны ли они? Я пока не проверял это).
Технически это возможно, но, как указал Дэвид ниже, пожалуйста, не используйте это
Я посмотрел, потому что вопрос довольно интересный!
В discourse/lib/theme-settings-store есть место, где хранятся настройки темы и экспортируются функции, такие как getObjectForTheme или getSetting.
Вы можете получить значение настройки для любого компонента темы, если знаете его ID.
Однако я не смог найти простой способ получить сопоставление ID перевода ↔ имени.
Тем не менее, можно использовать следующую уловку:
// Извлекает сопоставление имени темы <-> ID из тегов <link> для активных компонентов темы
const themesComponents = Array.from(
document.querySelectorAll("link[data-theme-name]")
).reduce((acc, link) => {
acc[link.dataset.themeName] = parseInt(link.dataset.themeId, 10);
return acc;
}, {});
// Получает ID темы на основе имени её компонента
const themeId = themesComponents["discotoc"];
// Получает все настройки
const themeSettings = getObjectForTheme(themeId);
// Получает конкретную настройку
const themeSetting = getSetting(themeId, "anchor_icon");
Настройки из разных тем/компонентов тем намеренно изолированы. Наличие взаимозависимостей между темами/компонентами тем значительно усложняет их разработку и поддержку.
Как показал @Arkshine, технически возможно взломать систему и найти эти данные, но я НАСТОЯТЕЛЬНО рекомендую этого не делать. Такой подход перестанет работать, если администратор изменит имя темы в панели управления, а также с высокой вероятностью случайно сломается при будущих изменениях в ядре.
Моя ошибка, я понял, что предоставленный мной код может быть ненадёжным. Мне действительно стоит быть осторожнее с тем, что я публикую здесь. Хакерство — это весело, но это продолжается только до тех пор, пока не приведёт к нежелательному использованию и проблемам в будущем.
О, не переживайте, @Arkshine — экспериментировать всегда полезно. Наличие пометки [details] в вашем сообщении — это хорошо, чтобы люди понимали, на какие риски идут
Если совместное использование таких настроек между плагинами и/или компонентами темы станет распространённым требованием, мы, безусловно, сможем разработать более надёжные варианты. Возможно, мы можем использовать эту тему, чтобы описать примеры использования.
Мое интуитивное ощущение таково: если тема пытается использовать настройки другой темы, то, возможно, их следует объединить в единый репозиторий?