Como adicionar campos personalizados aos modelos

É possível adicionar um campo personalizado às tags usando a mesma lógica?

2 curtidas

Alguém aplicou isso a grupos? Se sim, você pode compartilhar o que fez?

Eu acho que isso resolveria. Espero que ainda esteja atualizado.

Não, as tags não possuem campos personalizados. O que você está tentando realizar?

Sim, esse repositório deve funcionar. Basta alterar todas as instâncias de my_field para o nome do seu campo.

1 curtida

Estou tentando criar o seguinte plugin: Creating a User - Tag relation plugin

Existe alguma documentação adicional sobre como personalizar esses campos de grupo? Funciona muito bem com este código boilerplate. Mas como estendê-lo adequadamente?

Por exemplo, quero adicionar alguns campos de entrada, como:

<div class="control-group">
  <label class="control-label" for="map">Coordenadas do capítulo</label>
  <input name="chapter_coordinates" id="chapter_coordinates" class="ember-text-field ember-view input-xlarge" value={{group.custom_fields.group_coordinates}} placeholder="Ex: 52.3727598,4.8936041" type="text">
  <div class="control-instructions">Obtenha coordenadas de https://nominatim.openstreetmap.org/</div>
</div>

Mas estou apenas adivinhando o que fazer aqui e depois adicionar o restante das coisas do Discourse. O exemplo acima é para usar um campo para coordenadas. Pretendo usar o g.json para criar um mapa com base nos metadados do grupo.

Também pretendo adicionar uma caixa de seleção para enviar e-mails ao grupo com uma configuração de e-mail para esse grupo.

<div class="control-group">
  <label class="control-label" for="map">Contatar o capítulo por e-mail</label>
  {{input type="checkbox" checked=group.custom_fields.contact_group_by_email}}
  <span>{{i18n 'admin.groups.contact_group_by_email.label'}}</span>
</div>

No entanto, este campo é melhor colocado na aba de interação. Como saber o que fazer para colocá-lo lá? Eu gostaria de me tornar mais proficiente nisso. Mas tenho a impressão de que essa informação está apenas no código, não documentada em algum lugar. O que provavelmente está tudo bem, mas leva mais tempo e esforço para encontrar o que estou procurando. Embora o que eu quero adicionar seja bem pequeno, apenas alguns campos aos grupos :nerd_face:

Sim, pode ser complicado e um pouco avassalador ao começar a navegar na base de código do Discourse. Parece que você está tentando trabalhar com GeoJSON. Você já considerou usar ou estender o Plugin de Localizações? Ele já está configurado para funcionar com GeoJSON no Discourse.

Um curso em desenvolvimento de plugins?

Tenho considerado ministrar um curso gratuito em desenvolvimento de plugins do Discourse, que é essencialmente o que você precisa. Já escrevi o material do curso para um curso em desenvolvimento de temas (veja abaixo). Se 30 pessoas votarem em um curso de desenvolvimento de plugins, eu escreverei e darei um curso (via zoom) sobre isso.

  • Escrever e dar curso em desenvolvimento de plugins
  • Não escrever e dar um curso em desenvolvimento de plugins
0 voters
Introdução ao desenvolvimento de temas
  1. GitHub - pavilionedu/discourse-theme-introduction
  2. GitHub - pavilionedu/discourse-theme-css
  3. GitHub - pavilionedu/discourse-theme-colors
  4. GitHub - pavilionedu/discourse-theme-html-one
  5. GitHub - pavilionedu/discourse-theme-html-two
  6. GitHub - pavilionedu/discourse-theme-javascript-one
  7. GitHub - pavilionedu/discourse-theme-javascript-two

*ps se atingir 30, por favor me avise.

5 curtidas

Incrível! Na verdade, usarei um fork deste mapa da comunidade Fairphone. Eles usam a saída YAML bruta de um tópico. Modifiquei meu fork para usar os dados de g.json para desenhar marcadores no mapa. Apenas sinto falta de alguns campos, como coordenadas e um booleano para usar um endereço de e-mail no mapa. Talvez mais alguns, mas primeiro preciso saber como as coisas funcionam. Obrigado pelos links! Darei uma olhada esta semana e verei até onde consigo chegar. Um curso também seria incrível! Minhas habilidades em JS/Ruby são fracas no momento. Principalmente Python/Bash e algumas migalhas de outros idiomas.

É possível adicionar campos personalizados às postagens? Idealmente a partir do editor de posts.

Qual é a versão mínima do Discourse necessária para usar este plugin?
(discourse-topic-custom-fields)

Este GitHub - pavilionedu/discourse-group-custom-fields ainda está atualizado?

O motivo pelo qual pergunto é que tentei implementar um novo campo de grupo personalizado, mas ele não parece estar salvando/persistindo o valor que insiro no campo de entrada após clicar em Salvar.

Aqui está o commit com todas as alterações que fiz que (acho) seguiram corretamente a estrutura do repositório edu: add discord_role_id field to groups · aloha-pk/discourse-discord-sync@fd3eef1 · GitHub

Sim, acabei de testar e está funcionando como esperado.

{{input type="text" checked=group.custom_fields.discord_role_id}}

O seu problema é que você alterou o tipo de entrada para text, mas deixou a entrada de valor como checked. Você precisa mudar checked para value.

3 curtidas

Bem, isso resolve :man_facepalming: Obrigado pela ajuda! :smile:

1 curtida

Consegui reconstruir com essa alteração, mas infelizmente ainda estou vendo o mesmo problema. O valor que digitei é limpo depois que salvo e recarrego a página.

Alguma outra sugestão @angus?

Você alterou mais alguma coisa do exemplo? O exemplo funciona. Tente começar com o próprio exemplo. Se isso também estiver falhando em seu ambiente, então algo mais está acontecendo. Se o exemplo funcionar em seu ambiente, então trabalhe progressivamente pelas alterações que você fez até encontrar aquela que está quebrando.

Olá @angus adicionou um campo personalizado usando este plugin e está funcionando bem agora, como posso mostrar este campo na página da categoria abaixo do nome da categoria

Veja como você pode descobrir isso:

  1. Encontre os templates em discourse/discourse que renderizam a página da categoria (procure por um elemento HTML na página)

  2. Encontre um plugin-outlet em um desses templates

  3. Use o plugin outlet conforme descrito aqui

Escrevi este código, mas ele ainda não está funcionando. Você pode me dizer qual é o problema?

<script type="text/discourse-plugin" version="0.8">
  const { getOwner } = require("discourse-common/lib/get-owner");
  const { htmlSafe } = require("@ember/string");

  api.decorateWidget("category-heading:after", (helper) => {
    const category = helper.attrs.category;

    if (category.custom_fields?.location) {
      const customLocation = htmlSafe(category.custom_fields.location);
      const template = getOwner(helper).lookup("template:components/category-header");

      return template.fragment.build("custom-location", { customLocation });
    }
  });
</script>

<script type="text/x-handlebars" data-template-name="components/category-header/custom-location">
  <div class="category-custom-location">{{customLocation}}</div>
</script>

Que parte não está funcionando? Por exemplo, o que você vê quando insere um console.log(category.custom_fields) lá?

Instalei este plugin hoje com este código e ele parece estar quebrado: GitHub - pavilionedu/discourse-category-custom-fields: Discourse plugin showing how to add custom fields to Discourse categories

Ele é instalado como “Education Category Custom Field” e as informações do autor não estão lá:

O que você espera que aconteça? Não era para fazer nada sem modificação.

2 curtidas