Est-il possible d’accéder aux paramètres d’un composant de thème depuis un autre composant de thème ? Il semble que settings ne contienne que les paramètres du composant de thème dans lequel il se trouve.
Si ce n’est pas possible d’accéder aux paramètres d’un composant de thème depuis un autre composant de thème, quelle est la meilleure façon de le faire ?
avoir un seul composant de thème ?
déplacer les paramètres dans le thème principal (mais sont-ils disponibles ? Je ne l’ai pas encore testé).
Ceci est techniquement faisable, mais comme David l'a indiqué ci-dessous, veuillez ne pas l'utiliser
J’ai jeté un coup d’œil car c’est une question très intéressante !
Il existe un endroit dans discourse/lib/theme-settings-store où les paramètres du thème sont stockés et où des fonctions telles que getObjectForTheme ou getSetting peuvent être utilisées.
Vous pouvez récupérer la valeur d’un paramètre pour n’importe quel composant de thème tant que vous en avez l’ID.
Cependant, je n’ai pas trouvé de moyen simple de récupérer le mappage ID de traduction <=> nom.
Cela dit, vous pourriez faire l’astuce suivante :
// Récupère à partir des balises <link> le mappage nom du thème <=> ID pour les composants de thème actifs
const themesComponents = Array.from(
document.querySelectorAll("link[data-theme-name]")
).reduce((acc, link) => {
acc[link.dataset.themeName] = parseInt(link.dataset.themeId, 10);
return acc;
}, {});
// Obtient l'ID du thème en fonction de son nom de composant
const themeId = themesComponents["discotoc"];
// Obtient tous les paramètres
const themeSettings = getObjectForTheme(themeId);
// Obtient un paramètre spécifique
const themeSetting = getSetting(themeId, "anchor_icon");
Les paramètres de différents thèmes/composants de thème sont délibérément isolés. Avoir des interdépendances entre les thèmes/composants de thème les rend très difficiles à développer et à prendre en charge.
Comme l’a démontré @Arkshine, il est techniquement possible de pirater pour trouver les données, mais je le déconseille FORTEMENT. La stratégie échouera si un administrateur change le nom d’un thème dans le panneau d’administration, et il est également très probable qu’elle échoue aléatoirement avec les futures modifications du cœur.
Je suis désolé, j’ai réalisé que le code que j’ai fourni n’était peut-être pas fiable. Je devrais vraiment faire attention à ce que j’affiche ici. Le piratage est amusant, mais il dure jusqu’à ce qu’il entraîne des utilisations et des problèmes indésirables à l’avenir.
Oh, ne vous inquiétez pas du tout @Arkshine - c’est toujours bien d’expérimenter. Avoir la note [details] dans votre publication est bien pour s’assurer que les gens connaissent les risques qu’ils prennent
Si le partage de paramètres comme ceux-ci entre des plugins et/ou des composants de thème devient une exigence courante, alors nous pourrons certainement trouver des options plus robustes. Peut-être pouvons-nous utiliser ce sujet pour présenter des cas d’utilisation exemples.
Mon intuition est que, si un thème essaie d’utiliser les paramètres d’un autre thème alors… peut-être devraient-ils être fusionnés en un seul dépôt ?