Guia de Referência Rápida para Desenvolvedores de Temas

À medida que os temas se tornam mais poderosos, há mais coisas para lembrar sobre como eles funcionam. Temos muita documentação detalhada em #howto / #themes, mas se você só precisa de algo para refrescar sua memória, este guia pode ajudar.

Recursos Gerais

:scroll: Guia para iniciantes
:scroll: Guia para designers
:scroll: Guia para desenvolvedores
:paintbrush: Theme Creator
:desktop_computer: Theme CLI
:notebook_with_decorative_cover: Diretório de Temas
:jigsaw: Diretório de Componentes
:wrench: Modificadores de Tema
:wrench: Configurações do site temáveis

Estrutura de Arquivos/Pastas ler mais

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 (somente common)
locales/
  en.yml
  ...
assets/
  (arquivos com nomes arbitrários, referenciados em about.json)
stylesheets/
  (arquivos com nomes arbitrários, podem ser importados uns dos outros, e common/desktop/mobile.scss)
javascripts/
  (arquivos com nomes arbitrários. Suporta .js .hbs e .raw.hbs)

about.json informações da estrutura, metadados disponíveis

{
  "name": "Meu Tema",
  "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": {
    "Meu Esquema de Cores": {
      "primary": "222222"
    }
  }
}

SCSS

:link: Variáveis CSS Disponíveis

Javascript ler mais

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

export default apiInitializer((api) => {
  // Seu código
});

:link: JS Plugin API

:link: Javascript com Múltiplos Arquivos

Configurações ler mais

settings.yml:

fruit:
  default: apples|oranges
  type: list
  description: # Método antigo. É melhor defini-los nos arquivos de localidade (veja abaixo)
    en: English Description
    fr: Description Française

Acesso a partir do JavaScript:

console.log(settings.fruit);

Acesso a partir de templates gjs:

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

Acesso a partir do scss:

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

Configurações do site temáveis ler mais

about.json:

"theme_site_settings": {
  "enable_welcome_banner": false
}

Acesso a partir do JavaScript:

@service siteSettings;

this.siteSettings.enable_welcome_banner;

Acesso a partir de templates gjs:

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

Traduções ler mais

locales/en.yml

en:
  my_translation_key: "I love themes"
  theme_metadata: # Estes são usados no painel de administração. Eles não são disponibilizados para seus arquivos js/hbs
    description: Este tema permite que você faça coisas incríveis no seu Discourse
    settings:
      fruit: Uma descrição da configuração whitelisted_fruits

Acesso a partir do JavaScript:

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

Acesso a partir de templates gjs:

import { i18n } from "discourse-i18n";

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

Este documento é controlado por versão - sugira alterações no github.

40 curtidas

This is super useful.

Could I also suggest that a useful reference to add is the list of available color transformations:

3 curtidas

I must be missing something here, I’m trying to use I18n.t(themePrefix("my_translation_key")) but the Firefox console reports that themePrefix is undefined.
How can I invoke that function from an api function?

O link não parece mais válido.

2 curtidas

Você está certo. Deveria ser agora:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js

2 curtidas

Obrigado @th21 e @Arkshine - atualizei o link

2 curtidas

O link da API de Plugins mudou novamente:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.gjs

2 curtidas

Obrigado! Atualizado :writing_hand:

3 curtidas