Comment ajouter des champs personnalisés aux modèles

Est-il possible d’ajouter un champ personnalisé aux balises en utilisant la même logique ?

2 « J'aime »

Quelqu’un a-t-il appliqué cela aux groupes ? Si oui, pouvez-vous partager ce que vous avez fait ?

Je suppose que cela ferait l’affaire. J’espère que c’est toujours à jour.

Non, les balises n’ont pas de champs personnalisés. Qu’essayez-vous d’accomplir ?

Oui, ce dépôt devrait fonctionner. Changez simplement toutes les occurrences de my_field par le nom de votre champ.

1 « J'aime »

J’essaie de créer le plugin suivant : Creating a User - Tag relation plugin

Existe-t-il une documentation supplémentaire sur la façon de personnaliser ces champs de groupe ? Cela fonctionne très bien avec ce code de démarrage. Mais comment l’étendre correctement ?

Je souhaite par exemple ajouter quelques champs de saisie, comme :

<div class="control-group">
  <label class="control-label" for="map">Coordonnées du chapitre</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">Récupérer les coordonnées depuis https://nominatim.openstreetmap.org/</div>
</div>

Mais je devine ce qu’il faut faire ici et ensuite ajouter le reste des éléments Discourse. L’exemple ci-dessus consiste à utiliser un champ pour les coordonnées. J’ai l’intention d’utiliser le g.json pour créer une carte basée sur les métadonnées du groupe.

J’ai également l’intention d’ajouter une case à cocher pour envoyer un e-mail au groupe avec une configuration de messagerie pour ce groupe.

<div class="control-group">
  <label class="control-label" for="map">Contacter le chapitre par 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>

Cependant, ce champ est mieux placé dans l’onglet d’interaction. Comment savoir quoi faire pour le mettre là ? J’aimerais devenir plus compétent en la matière. Mais j’ai l’impression que ces informations ne sont que dans le code, pas documentées quelque part. Ce qui est probablement acceptable, mais demande juste plus de temps et d’efforts pour trouver ce que je cherche. Bien que ce que je veux ajouter soit assez petit, juste quelques champs aux groupes :nerd_face:

Oui, cela peut être délicat et un peu écrasant lorsque l’on commence à naviguer dans la base de code de Discourse. Il semble que vous essayiez de travailler avec GeoJSON. Avez-vous envisagé d’utiliser ou d’étendre le plugin Locations ? Il est déjà configuré pour fonctionner avec GeoJSON dans Discourse.

Un cours sur le développement de plugins ?

J’ai envisagé de proposer un cours gratuit sur le développement de plugins Discourse, ce qui est essentiellement ce dont vous avez besoin. J’ai déjà rédigé le matériel pédagogique pour un cours sur le développement de thèmes (voir ci-dessous). Si 30 personnes votent pour un cours sur le développement de plugins, je le rédigerai et le donnerai (via Zoom).

  • Rédiger et donner un cours sur le développement de plugins
  • Ne pas rédiger et donner un cours sur le développement de plugins
0 voters
Introduction au développement de thèmes
  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 cela atteint 30, faites-le moi savoir.

5 « J'aime »

Génial ! Je vais en fait utiliser un fork de cette carte communautaire Fairphone. Ils utilisent la sortie YAML brute d’un sujet. J’ai modifié mon fork pour utiliser les données de g.json afin de dessiner des marqueurs sur la carte. Il me manque juste quelques champs tels que les coordonnées et un booléen pour utiliser une adresse e-mail sur la carte. Peut-être quelques autres, mais d’abord, je dois comprendre comment les choses fonctionnent. Merci pour les liens ! Je vais y jeter un œil cette semaine et voir jusqu’où j’irai. Un cours serait aussi génial ! Mes compétences en JS/Ruby sont limitées. Principalement Python/Bash et quelques miettes d’autres langages.

Est-il possible d’ajouter des champs personnalisés aux articles ? Idéalement depuis l’éditeur d’articles.

Quelle est la version minimale de Discourse requise pour utiliser ce plugin ?
(discourse-topic-custom-fields)

Est-ce que GitHub - pavilionedu/discourse-group-custom-fields est toujours à jour ?

La raison pour laquelle je demande est que j’ai tenté d’implémenter un nouveau champ personnalisé de groupe, mais il ne semble pas enregistrer/persister la valeur que j’entre dans le champ de saisie après avoir cliqué sur Enregistrer.

Voici le commit avec toutes les modifications que j’ai apportées et qui (je pense) ont correctement suivi la structure du dépôt edu : add discord_role_id field to groups · aloha-pk/discourse-discord-sync@fd3eef1 · GitHub

Oui, je viens de le tester et il fonctionne comme prévu.

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

Votre problème est que vous avez changé le type d’entrée en text, mais laissé l’entrée de valeur comme checked. Vous devez changer checked en value.

3 « J'aime »

Eh bien, ça devrait régler le problème :face_palm: Merci pour votre aide ! :smile:

1 « J'aime »

J’ai pu reconstruire avec cette modification, mais malheureusement, je rencontre toujours le même problème. La valeur que j’ai saisie est effacée après que j’ai sauvegardé et rechargé la page.

D’autres suggestions @angus ?

Avez-vous changé autre chose par rapport à l’exemple ? L’exemple fonctionne. Essayez de commencer par l’exemple lui-même. Si cela échoue également dans votre environnement, alors quelque chose d’autre se passe. Si l’exemple fonctionne dans votre environnement, alors progressez à travers les changements que vous avez apportés jusqu’à ce que vous trouviez celui qui le casse.

Salut @angus a ajouté un champ personnalisé à l’aide de ce plugin et cela fonctionne bien maintenant, comment puis-je afficher ce champ sur la page de catégorie sous le nom de la catégorie

Voici comment vous pouvez le découvrir :

  1. Trouvez les modèles dans discourse/discourse qui rendent la page de catégorie (recherchez un élément HTML sur la page)

  2. Trouvez un “plugin-outlet” dans l’un de ces modèles

  3. Utilisez le “plugin-outlet” comme décrit ici
    Using Plugin Outlet Connectors from a Theme or Plugin

J’ai écrit ce code mais il ne fonctionne toujours pas, pouvez-vous me dire quel est le problème

<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>

Quelle partie ne fonctionne pas ? Par exemple, que voyez-vous lorsque vous insérez console.log(category.custom_fields) là-dedans ?

J’ai installé ce plugin aujourd’hui avec ce code et il semble être cassé : GitHub - pavilionedu/discourse-category-custom-fields: Discourse plugin showing how to add custom fields to Discourse categories

Il s’installe sous le nom de « Education Category Custom Field » et les informations de l’auteur ne sont pas là :

À quoi vous attendez-vous ? Il n’est pas censé faire quoi que ce soit sans modification.

2 « J'aime »