Cómo agregar campos personalizados a modelos

¿Es posible añadir un campo personalizado a las etiquetas con la misma lógica?

2 Me gusta

¿Alguien ha aplicado esto a grupos? Si es así, ¿pueden compartir lo que hicieron?

Supongo que esto haría el truco. Espero que siga actualizado.

No, las etiquetas no tienen campos personalizados. ¿Qué intentas conseguir?

Sí, ese repositorio debería funcionar. Solo cambia todas las instancias de my_field por el nombre de tu campo.

1 me gusta

Estoy intentando crear el siguiente plugin: Creating a User - Tag relation plugin

¿Hay más documentación sobre cómo personalizar estos campos de grupo? Realmente funciona muy bien con este código de ejemplo. Pero, ¿cómo extenderlo adecuadamente?

Por ejemplo, quiero agregar algunos campos de entrada, como:

<div class="control-group">
  <label class="control-label" for="map">Coordenadas del 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="Ej. 52.3727598,4.8936041" type="text">
  <div class="control-instructions">Obtener coordenadas de https://nominatim.openstreetmap.org/</div>
</div>

Pero solo estoy adivinando qué hacer aquí y luego agregar el resto de las cosas de Discourse. El ejemplo anterior es para usar un campo para coordenadas. Mi intención es usar g.json para crear un mapa basado en los metadatos del grupo.

También tengo la intención de agregar una casilla de verificación para enviar correos electrónicos al grupo con una configuración de correo para ese grupo.

<div class="control-group">
  <label class="control-label" for="map">Contactar al capítulo por correo electrónico</label>
  {{input type="checkbox" checked=group.custom_fields.contact_group_by_email}}
  <span>{{i18n 'admin.groups.contact_group_by_email.label'}}</span>
</div>

Sin embargo, este campo se colocaría mejor en la pestaña de interacción. ¿Cómo saber qué hacer para ponerlo allí? Me gustaría ser más competente en esto. Pero tengo la impresión de que esta información está solo en el código, no documentada en algún lugar. Lo cual probablemente esté bien, pero simplemente lleva más tiempo y esfuerzo encontrar lo que busco. Aunque lo que quiero agregar es bastante pequeño, solo unos pocos campos a los grupos :nerd_face:

Sí, puede ser complicado y un poco abrumador al empezar a navegar por la base de código de Discourse. Parece que estás intentando trabajar con GeoJSON. ¿Has considerado usar o extender el Plugin de Ubicaciones? Ya está configurado para trabajar con GeoJSON en Discourse.

¿Un curso de desarrollo de plugins?

He estado considerando impartir un curso gratuito de desarrollo de plugins de Discourse, que es esencialmente lo que necesitas. Ya he escrito los materiales del curso para un curso de desarrollo de temas (ver abajo). Si 30 personas votan por uno de desarrollo de plugins, escribiré y daré un curso (vía zoom) sobre ello.

  • Escribir y dar curso de desarrollo de plugins
  • No escribir y dar curso de desarrollo de plugins
0 voters
Introducción al desarrollo 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 si llega a 30, por favor házmelo saber.

5 Me gusta

¡Genial! De hecho, usaré un fork de este mapa de la comunidad Fairphone. Usan la salida YAML sin procesar de un tema. He modificado mi fork para usar los datos de g.json para dibujar marcadores en el mapa. Solo me faltan algunos campos como coordenadas y un booleano para usar una dirección de correo electrónico en el mapa. Quizás algunos más, pero primero necesito saber cómo funcionan las cosas. ¡Gracias por los enlaces! Le echaré un vistazo esta semana y veré hasta dónde llego. ¡Un curso también sería genial! Mis habilidades en JS/Ruby son ahora mismo. Principalmente Python/Bash y algunas migajas de otros idiomas.

¿Es posible añadir campos personalizados a las publicaciones? Idealmente desde el editor de publicaciones.

¿Cuál es la versión mínima de Discourse requerida para usar este plugin?
(discourse-topic-custom-fields)

¿Está GitHub - pavilionedu/discourse-group-custom-fields todavía actualizado?

La razón por la que pregunto es porque intenté implementar un nuevo campo personalizado para grupos, pero no parece estar guardando/persistiendo el valor que ingreso en el campo de entrada después de hacer clic en Guardar.

Aquí está el commit con todos los cambios que hice que (creo) siguieron correctamente la estructura del repositorio de edu: add discord_role_id field to groups · aloha-pk/discourse-discord-sync@fd3eef1 · GitHub

Sí, acabo de probarlo y funciona como se esperaba.

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

Tu problema es que has cambiado el tipo de entrada a text, pero has dejado la entrada de valor como checked. Necesitas cambiar checked a value.

3 Me gusta

Bueno, eso lo solucionará :man_facepalming: ¡Gracias por la ayuda! :smile:

1 me gusta

Pude reconstruir con este cambio, pero desafortunadamente sigo viendo el mismo problema. El valor que ingresé se borra después de guardar y volver a cargar la página.

¿Alguna otra sugerencia @angus?

¿Cambiaste algo más del ejemplo? El ejemplo funciona. Intenta empezar con el propio ejemplo. Si eso también falla en tu entorno, entonces está pasando algo más. Si el ejemplo funciona en tu entorno, entonces ve revisando progresivamente los cambios que hiciste hasta que encuentres el que lo está rompiendo.

Hola @angus añadió un campo personalizado usando este plugin y ahora funciona bien, ¿cómo puedo mostrar este campo en la página de categoría debajo del nombre de la categoría?

Aquí te mostramos cómo puedes averiguarlo:

  1. Busca las plantillas en discourse/discourse que renderizan la página de la categoría (busca un elemento HTML en la página).

  2. Busca un plugin-outlet en una de esas plantillas.

  3. Utiliza el plugin outlet como se describe aquí:
    Using Plugin Outlet Connectors from a Theme or Plugin

He escrito este código pero todavía no funciona, ¿puedes decirme el 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>

¿Qué parte no funciona? Por ejemplo, ¿qué ves cuando pones console.log(category.custom_fields) ahí?

Instalé este plugin hoy con este código y parece estar roto: GitHub - pavilionedu/discourse-category-custom-fields: Discourse plugin showing how to add custom fields to Discourse categories

Se instala como “Education Category Custom Field” y la información del autor no está ahí:

¿Qué esperas que suceda? No se supone que haga nada sin modificaciones.

2 Me gusta