Développement de plugins Discourse - Partie 3 - Ajouter des paramètres personnalisés au site

You simply need to add a

config/locales/server.zh_CN.yml

file (and similar for any other locales you want to support) with the same English tokens but with language specific values and the plugin will use that instead of falling back to the English.

2 « J'aime »

Thanks for helping! have a nice day!

3 « J'aime »

I was looking how to create a site setting that validates a username, but found there’s a username type to do this. Here the list of site setting types we have today:

  • email
  • username
  • integer
  • regex
  • string
  • list
  • enum

Also, you can do custom validations for your plugin settings, it accepts a validator field that expects a Ruby class. You use it like this.

plugins:
  my_custom_username_validation:
    default: 'system'
    validator: 'UsernameSettingValidator'

You can check the UsernameSettingValidator class to see the interface of validators.

Cheers!

10 « J'aime »

not working (

<a id="forgot-password-link" class="forgot-password" href="{{Discourse.SiteSettings.myplugin_link_forgot_password}}" target="_blank">Forgot password?</a>

settings.yml

plugins:
  myplugin_enabled:
    default: true
    client: true
  myplugin_link_forgot_password:
    default: ''
    client: true

upd:
working!!!
href="{{unbound siteSettings.myplugin_link_forgot_password}}"

how to display text html ?
not working {{unbound siteSettings.forum_text_for_admin}}

upd:
working in *.hbs {{{unbound siteSettings.forum_text_for_admin}}}

Again you need to use a Computed Property and format as safe html. This is EmberJS not vanilla JavaScript. You can’t put ‘code’ directly into templates. Read the ember guides.

1 « J'aime »

already working with EmberJS

J’ai ceci dans mon settings.yml :

plugins:
  county_fence_enabled:
    default: false
    client: true
  county_fence_latrine_category:
    default: -1
    client: true

Ceci apparaît sur ma page /admin/plugins :

Je ne comprends pas pourquoi il n’y a pas de bouton Paramètres ?

Je pense qu’au lieu de plugins, vous êtes censé écrire le nom du plugin county_fence.

2 « J'aime »

J’ai essayé cela aussi, sans aucune différence.

Cette documentation (ainsi que le message initial) utilise la clé plugins. Dans d’autres endroits, j’ai vu le nom du plugin utilisé, comme vous l’avez dit.

1 « J'aime »

@bitmage en fait, je pourrais connaître la raison.

As-tu écrit # name: County Fence dans plugin.rb ?
Si c’est le cas, le nom doit être le même que celui de ton répertoire.

Le nom du plugin peut être écrasé depuis la locale :

En supposant que tu as ce format de paramètres :

county_fence:
  county_fence_enabled: true
  ...

dans client.en.yml :

en:
  admin_js:
    admin:
      site_settings:
        categories:
          county_fence: "County Fence"

Définir la valeur par défaut sur 0 au lieu de -1 a fait apparaître le problème.

Existe-t-il un moyen de savoir qu’un type n’est pas détecté correctement ?

  1. YamlLoader charge le fichier.
  2. SiteSettingExtension appelle setting() avec les paramètres générés par YamlLoader
  3. …ce qui appelle defaults.load_setting puis plus tard type_supervisor.load_setting
  4. Bien que type_supervisor.load_setting ne reçoive pas directement la valeur, il a accès aux valeurs par défaut car elles sont transmises lors de l’initialisation de TypeSupervisor via DefaultsProvider.
  5. type_supervisor.load_setting appelle ensuite get_data_type qui appelle parse_value_type() qui devrait lever une ArgumentError si le type ne peut pas être détecté.

Je pense que toute cette séquence est appelée par load_settings dans le modèle SiteSetting, et je ne vois aucune gestion d’exception nulle part dans la pile. Mais je ne vois aucune sortie d’erreur dans le journal du serveur, ni ailleurs.

Il semble qu’il devrait y avoir une sorte de retour utilisateur ou de journal d’erreurs pour indiquer qu’un paramètre n’a pas pu être analysé.

Si je comprends bien, vous dites qu’utiliser -1 comme valeur par défaut pour un paramètre fait que le bouton « Paramètres » n’apparaît pas. Pouvez-vous reproduire ce comportement à chaque fois ?

C’est étrange. Je ne vois rien de mal dans vos paramètres, je ne suis pas sûr de la façon dont il est possible d’échouer lors de l’analyse. :thinking:

Maintenant que cela fonctionne, je peux le remettre à -1 et cela continue de fonctionner.

J’ai supprimé la base de données, réinitialisé et je ne parviens toujours pas à le reproduire. :person_shrugging:

1 « J'aime »

J’ai déployé le plugin sur mon site en production en utilisant la valeur par défaut de 0, juste pour être sûr. Le bouton des paramètres s’affiche :

image

Mais lorsque je clique dessus, aucun paramètre n’est répertorié :

Je vais désactiver le plugin pendant que je continue à dépanner ce problème.

Ok, je pense que dans les deux cas (dev et production), c’est parce que le dossier dans le répertoire des plugins ne correspondait pas à county-fence. C’est pourquoi le paramètre ne s’affichait pas, et cela aurait peut-être causé d’autres problèmes également.

Merci à tous !

1 « J'aime »

Je ne comprends pas bien. La plupart des plugins que j’ai installés n’utilisent pas plugins:, y compris les plugins officiels et récents (ainsi que le modèle squelette).

Je pensais que cette partie était utilisée pour le filtrage des paramètres, mais je me trompe peut-être.

1 « J'aime »

Ah, intéressant ! Mes excuses alors.

Ce que je dirai, c’est que ce n’est apparemment pas nécessaire.

J’ai perdu le compte du nombre de plugins que j’ai écrits avec plugins:

1 « J'aime »

Pour développer la documentation :

Une liste complète des types de paramètres du site est disponible dans le code de type_supervisor.rb. Juste au-dessus, vous pouvez également voir les clés enfants valides qu’un paramètre du site accepte.

Un exemple plus avancé qui utilise davantage ces options se trouve dans le composant de thème discourse-welcome-link. Ces mêmes valeurs devraient fonctionner à l’intérieur d’un plugin, mais le fichier serait plutôt situé à config/settings.yml.

3 « J'aime »

Il existe des différences entre les types de plugins et de composants de thème.

J’ai essayé de créer un tableau (en m’attendant à des erreurs mineures ou à des regroupements)

Catégorie Fonctionnalité Syntaxe du plugin Syntaxe TC
Types de base Chaîne de caractères type: string
min: ..
max: ..
regex: ..
secret: true/false
global
validator: nom de classe
type: string
min: ..
max: ..
-
-
-
-
Texte multiligne type: string
textarea: true
type: string
textarea: true
Entier type: integer
min: ..
max: ..
type: integer
min: ..
max: ..
Nombre à virgule flottante type: float
min: ..
max: ..
type: float
min: ..
max: ..
Booléen type: bool type: bool
Heure type: time -
Nul type: null -
Types de sélection Enum (liste déroulante) type: enum
choices: [option1, option2]
enum: ..
type: enum
choices: [option1, option2]
Catégorie type: category -
Couleur type: color -
Groupe type: group -
Email type: email -
Nom d’utilisateur type: username -
Types de liste Liste générique type: list
allow_any: true/false
type: list
Liste simple/compacte type: simple_list
Ou
type: list
list_type: compact
list_type: simple
type: list
list_type: compact
list_type: simple
Liste de catégories type: category_list type: list
list_type: category
Liste de groupes type: group_list type: list
list_type: group
Liste de tags type: tag_list type: list
list_type: tag
Liste de groupes de tags type: tag_group_list -
Liste d’URL type: url_list -
Liste d’hôtes type: host_list -
Liste de valeurs type: value_list -
Liste d’emojis type: emoji_list -
Types de fichiers Téléchargement type: upload type: upload
Liste d’images téléchargées type: uploaded_image_list -
Restriction de taille de fichier type: file_size_restriction
min: ..
max: ..
-
Types spéciaux HTML (obsolète) type: html_deprecated -
Objets JSON obsolète obsolète
Objets - type: objects
5 « J'aime »