Cómo acceder a la configuración de un componente de tema desde otro componente de tema

¿Hay alguna forma de acceder a la configuración de un componente de tema desde otro componente de tema? Parece que settings contiene solo la configuración del componente de tema en el que se encuentra.

Si no es posible acceder a la configuración de un componente de tema desde otro componente de tema, ¿cuál es la mejor manera de hacerlo?

  • ¿tener un único componente de tema?
  • ¿mover la configuración al tema principal (pero ¿están disponibles? Aún no lo he probado).
4 Me gusta
Esto es técnicamente factible, pero como David indica a continuación, por favor no lo uses

¡Le eché un vistazo porque es una pregunta bastante interesante! :+1:

Hay un lugar en discourse/lib/theme-settings-store donde se almacenan la configuración del tema y se pueden usar funciones de exportación como getObjectForTheme o getSetting.
Puedes recuperar el valor de una configuración para cualquier componente de tema siempre que tengas su ID.
Sin embargo, no pude encontrar una forma fácil de obtener el mapeo de ID de traducción ↔ nombre.

Dicho esto, podrías hacer el siguiente truco:

// Recupera de las etiquetas <link> el mapeo de nombre de tema <-> ID para los componentes de tema activos
const themesComponents = Array.from(
  document.querySelectorAll("link[data-theme-name]")
).reduce((acc, link) => {
  acc[link.dataset.themeName] = parseInt(link.dataset.themeId, 10);
  return acc;
}, {});

// Obtiene el ID del tema basado en su nombre de componente
const themeId = themesComponents["discotoc"];

// Obtiene todas las configuraciones
const themeSettings = getObjectForTheme(themeId);

// Obtiene una configuración específica
const themeSetting = getSetting(themeId, "anchor_icon");

image

No estoy seguro de que sea la forma más fiable; algunos ayudantes serían útiles si no existen.

4 Me gusta

La configuración de diferentes temas/componentes de temas está deliberadamente aislada. Tener interdependencias entre temas/componentes de temas hace que sean muy difíciles de desarrollar y mantener.

Como demostró @Arkshine, es técnicamente posible hackear para encontrar los datos, pero RECOMIENDO ENCARECIDAMENTE que no lo haga. La estrategia se romperá si un administrador cambia el nombre de un tema en el panel de administración, y también es muy probable que se rompa aleatoriamente con futuros cambios principales.

6 Me gusta

Lo siento, me di cuenta de que el código que proporcioné podría no ser confiable. Realmente debería tener cuidado con lo que muestro aquí. Hackear es divertido, pero dura hasta que conduce a usos y problemas no deseados en el futuro. :worried:

4 Me gusta

No te preocupes en absoluto, @Arkshine, siempre es bueno experimentar. Tener la nota [details] en tu publicación es bueno para asegurarte de que las personas conozcan los riesgos que corren :chefs_kiss:

Si compartir configuraciones como esta entre complementos y/o componentes de temas se convierte en un requisito común, entonces ciertamente podemos encontrar opciones más sólidas. Quizás podamos usar este tema para exponer casos de uso de ejemplo.

Mi instinto me dice que, si un tema intenta usar la configuración de otro tema, entonces… ¿quizás deberían fusionarse en un solo repositorio?

5 Me gusta

Este tema se cerró automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.