Guide de référence rapide pour les développeurs de thèmes

Les thèmes devenant plus puissants, il y a plus de choses à retenir sur leur fonctionnement. Nous avons beaucoup de documentation détaillée sous #howto / #themes, mais si vous avez juste besoin de quelque chose pour vous rafraîchir la mémoire, ce guide pourrait vous aider.

Ressources Générales

:scroll: Guide du débutant
:scroll: Guide du designer
:scroll: Guide du développeur
:paintbrush: Theme Creator
:desktop_computer: Theme CLI
:notebook_with_decorative_cover: Répertoire des thèmes
:jigsaw: Répertoire des composants
:wrench: Theme Modifiers
:wrench: Paramètres de site modifiables par le thème

Structure des Fichiers/Dossiers lire la suite

about.json
settings.yml
common/, desktop/, mobile/
  {common|desktop|mobile}.scss
  head_tag.html
  header.html
  after_header.html
  body_tag.html
  footer.html
  embedded.scss (common seulement)
locales/
  en.yml
  ...
assets/
  (fichiers nommés arbitrairement, référencés dans about.json)
stylesheets/
  (fichiers nommés arbitrairement, peuvent être importés les uns des autres, et common/desktop/mobile.scss)
javascripts/
  (fichiers nommés arbitrairement. Supporte .js .hbs et .raw.hbs)

about.json infos sur la structure, métadonnées disponibles

{
  "name": "Mon Thème",
  "component": false,
  "license_url": null,
  "about_url": null,
  "authors": null,
  "theme_version": null,
  "minimum_discourse_version": null,
  "maximum_discourse_version": null,
  "assets": {
    "variable-name": "assets/my-asset.jpg"
  },
  "color_schemes": {
    "Mon Schéma de Couleur": {
      "primary": "222222"
    }
  }
}

SCSS

:link: Variables CSS disponibles

Javascript lire la suite

// {theme}/javascripts/api-initializers/init-theme.gjs
import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  // Votre code ici
});

:link: JS Plugin API

:link: Javascript multi-fichiers

Paramètres lire la suite

settings.yml :

fruit:
  default: apples|oranges
  type: list
  description: # Ancienne méthode. Il est préférable de les définir dans les fichiers de localisation (voir ci-dessous)
    en: English Description
    fr: Description Française

Accès depuis JavaScript :

console.log(settings.fruit);

Accès depuis les modèles gjs :

<template>{{settings.fruit}}</template>

Accès depuis scss :

html {
  font-size: #{$global-font-size}px;
  background: $site-background;
}

Paramètres de site modifiables par le thème lire la suite

about.json :

"theme_site_settings": {
  "enable_welcome_banner": false
}

Accès depuis JavaScript :

@service siteSettings;

this.siteSettings.enable_welcome_banner;

Accès depuis les modèles gjs :

<template>{{this.siteSettings.enable_welcome_banner}}</template>

Traductions lire la suite

locales/en.yml

en:
  my_translation_key: "I love themes"
  theme_metadata: # Ceux-ci sont utilisés dans le panneau d'administration. Ils ne sont pas disponibles pour vos fichiers js/hbs
    description: Ce thème vous permet de faire des choses incroyables sur votre Discourse
    settings:
      fruit: Une description du paramètre whitelisted_fruits

Accès depuis JavaScript :

import { i18n } from "discourse-i18n";
i18n(themePrefix("my_translation_key"));

Accès depuis les modèles gjs :

import { i18n } from "discourse-i18n";

<template>
  {{i18n (themePrefix "my_translation_key")}}
  <DButton @label={{theme-prefix "my_translation_key"}} />
</template>

Ce document est contrôlé par version - suggérez des modifications sur github.

40 « J'aime »

C’est super utile.

Pourrais-je également suggérer d’ajouter une référence utile : la liste des transformations de couleur disponibles :

3 « J'aime »

Il doit me manquer quelque chose ici. J’essaie d’utiliser I18n.t(themePrefix("my_translation_key")), mais la console Firefox indique que themePrefix est indéfini.
Comment puis-je appeler cette fonction depuis une fonction d’API ?