Incluir assets (ex: imagens, fontes) em temas e componentes

Temas e componentes de tema permitem que você gerencie ativos carregados, como imagens e fontes. Você pode controlar quais ativos seu tema aceita usando a configuração do site: theme authorized extensions

Incluindo ativos em temas e componentes

Para temas remotos

Temas remotos incluem:

  • Temas e componentes instalados a partir da lista de temas Popular
  • Temas e componentes instalados usando o método From a git repository

Para carregar ativos em um tema remoto ou componente de tema, consulte Create and share a font theme component para um exemplo detalhado.

Carregando ativos em temas e componentes locais

Temas locais incluem:

  • Os temas padrão Light e Dark que acompanham todas as instâncias do Discourse
  • Temas e componentes criados usando o método de instalação + Create New
  • Temas e componentes que foram carregados do seu computador local usando o método de instalação From your device.

Para carregar ativos em um tema local ou componente de tema, navegue até seu tema ou componente e selecione + Add na seção Uploads:

No modal Add Upload, escolha um arquivo e insira um nome de variável SCSS para usar com suas personalizações CSS, javascript e/ou handlebars

Após o carregamento, o ativo aparecerá na lista Uploads:

:warning: Nota Importante: Não adicione uploads a temas e componentes através da interface de administração se o componente foi instalado remotamente a partir de um repositório git. Atualizações para o componente removerão quaisquer uploads que não foram incluídos no repositório git.

Como utilizar os ativos

SCSS

@font-face {
  font-family: Amazing;
  src: url($Comic-Sans) format("woff2");
}

body {
  font-family: Amazing;
  font-size: 15px;
}

.d-header {
  background-image: url($texture);
}

:information*source: _Ao usar fontes ttf ou otf, certifique-se de usar o formato opentype._

Javascript

// {theme}/javascripts/discourse/api-initializers/init-theme.gjs

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  console.log(settings.theme_uploads.balloons);
});

HTML

Você não pode adicionar um ativo de tema diretamente ao HTML simples (como nas seções header ou after header do painel de administração de personalizar). Você precisa usar um template handlebars ou a API de plugin (mais sobre isso em Developing Discourse Themes & Theme Components).

Uma solução alternativa é carregar seu ativo como uma imagem de fundo usando SCSS (como no exemplo acima). Então, na seção header do seu tema, você pode adicionar:

<div class="my-custom-div">
  <a href="/"></a>
</div>

e então no seu CSS:

.my-custom-div a {
  height: 50px;
  width: 100px;
  background-image: url($asset-name);
}

Acessando uploads de tema como configurações

Você também pode tratar theme_uploads como configurações em JavaScript (commit relacionado).

Isso permite que temas e componentes acessem ativos de tema.

Dentro do js do tema, você pode obter o URL para um ativo com:

settings.theme_uploads.name

Informações Adicionais


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

30 curtidas

Criei um diretório de assets com 5 arquivos svg para ícones de mídia social. Adicionei todos eles ao about.json, conforme indicado em Create and Share a font theme component. Eu os uso no meu CSS em body_tag.html.

Esperado: Os ícones devem carregar.

Real: Os ícones não são exibidos. A barra de ferramentas de desenvolvimento mostra que o navegador tem algum conceito de que eles existem como Imagens registradas… mas não há dados neles.

O que estou perdendo? Existe uma etapa de compilação ou algo assim?

1 curtida