Come accedere all'impostazione del componente tema da un altro componente tema

È possibile accedere alle impostazioni di un componente del tema da un altro componente del tema? Sembra che settings contenga solo le impostazioni per il componente del tema in cui si trova.

Se non è possibile accedere alle impostazioni di un componente del tema da un altro componente del tema, qual è il modo migliore per farlo?

  • avere un singolo componente del tema?
  • spostare le impostazioni nel tema principale (ma sono disponibili? Non l’ho ancora testato).
4 Mi Piace
Questo è tecnicamente fattibile, ma come indicato da David di seguito, per favore non usarlo

Ho dato un’occhiata perché è una domanda piuttosto interessante! :+1:

C’è un posto in discourse/lib/theme-settings-store dove sono memorizzate le impostazioni del tema e si possono usare funzioni di esportazione come getObjectForTheme o getSetting.
Puoi recuperare il valore di un’impostazione per qualsiasi componente del tema, purché tu ne conosca l’ID.
Tuttavia, non sono riuscito a trovare un modo semplice per recuperare la mappatura ID traduzione ↔ nome.

Detto questo, potresti fare il seguente trucco:

// Recupera dai tag <link> la mappatura nome tema <-> ID per i componenti del tema attivi
const themesComponents = Array.from(
  document.querySelectorAll("link[data-theme-name]")
).reduce((acc, link) => {
  acc[link.dataset.themeName] = parseInt(link.dataset.themeId, 10);
  return acc;
}, {});

// Ottiene l'ID del tema in base al suo nome componente
const themeId = themesComponents["discotoc"];

// Ottiene tutte le impostazioni
const themeSettings = getObjectForTheme(themeId);

// Ottiene un'impostazione specifica
const themeSetting = getSetting(themeId, "anchor_icon");

image

Non sono sicuro che sia il modo più affidabile; sarebbero utili alcuni helper se non esistessero.

4 Mi Piace

Le impostazioni di temi/componenti tema diversi sono deliberatamente isolate. Avere interdipendenze tra temi/componenti tema rende molto difficile svilupparli e supportarli.

Come dimostrato da @Arkshine, è tecnicamente possibile hackerare per trovare i dati, ma lo SCONSIGLIO VIVAMENTE. La strategia si interromperà se un amministratore cambia il nome di un tema nel pannello di amministrazione, ed è anche molto probabile che si interrompa casualmente con future modifiche al core.

6 Mi Piace

Mi dispiace, mi sono reso conto che il codice che ho fornito potrebbe non essere affidabile. Dovrei davvero fare attenzione a ciò che mostro qui. L’hacking è divertente, ma dura finché non porta a usi e problemi indesiderati in futuro. :worried:

4 Mi Piace

Oh, non preoccuparti affatto @Arkshine, è sempre bene sperimentare. Avere la nota [details] nel tuo post è utile per assicurarsi che le persone sappiano i rischi che corrono :chefs_kiss:

Se la condivisione di impostazioni in questo modo tra plugin e/o componenti del tema diventerà un requisito comune, allora possiamo certamente elaborare opzioni più robuste. Forse possiamo usare questo argomento per delineare casi d’uso di esempio.

La mia sensazione è che, se un tema sta cercando di utilizzare le impostazioni di un altro tema, allora… forse dovrebbero essere uniti in un unico repository?

5 Mi Piace

Questo argomento è stato chiuso automaticamente 30 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.