Validation d'un paramètre du plugin

Bonjour
j’ai une question basique probablement mais que je ne trouve pas dans le forum
j’ai un paramètre global de plugin ( dans configuration.php) que j’aimerais être une valeur en secondes. donc un nombre entier.

      <div class="col-md-4">
        <input type="number" class="configKey form-control" data-l1key="refresh_freq"/>
      </div>

je récupère ensuite cette valeur dans mon code PHP

config::byKey('refresh_freq', VERALINK, 60, true);

Comment faire pour m’assurer que c’est bien un nombre. coté client le type=« number » semble ignoré, et coté server PHP, est il possible de valider la valeur avant de la stocker dans la configuration du plugin ?

Salut,

Tu dois créer une méthode nommée preConfig_[clé_de_la_config] dans ta class eqLogic
Si le nom de ton paramètre contient ::, : ou - tu dois remplacer par _

Donc dans ton cas ceci devrait fonctionner::

public static function preConfig_refresh_freq($value) {
}

Dans cette méthode tu peux nettoyer la valeur, faire ce que tu veux et renvoyer (return) la valeur à sauver ou jeter une exception, cela devrait fonctionner, le message de l’exception sera affiché sur l’écran de config normalement.

A noter qu’il existe l’équivalent pour des actions après la sauvegarde: postConfig_[clé_de_la_config]

Pour plus de détails, voir méthode public static function save($_key, $_value, $_plugin = 'core') {} de la classe config

edit: et il existe aussi le même principe en JS: tu peux avoir une méthode js qui sera appelée après sauvegarde de la config (si besoin faut que je retrouve comment ca marchait)

edit2: je devrais vraiment documenter tous ces petits « usages avancées » du core :slight_smile:

1 « J'aime »

Hey :wink:

Pre et post_config sont documentés dans la classe du plugin template depuis peu

1 « J'aime »

Merci a vous deux. super !
je me suis essayer a un change request dans GitHub ( mon premier ) pour clarifier cette utilisation dans le plugin template

je veux bien un pointeur pour cette partie client side javascript stp :upside_down_face:

Voila, ca n’a pas été très long à retrouver;
il suffit d’avoir une méthode js déclarée et chargée portant le nom

function [pluginId]_postSaveConfiguration() {
}

Donc à mettre soit dans le configuration.php dans un balise script soit faire un include d’un fichier js et y mettre les fonctions nécessaire (plus propre je trouve).

Ca permet donc de faire certaines actions au postSave coté php (par exemple connecter un démon, valider des credentials etc) et ensuite coté js être prévenu que la config a été faite et on peut rappeler en ajax une méthode de notre plugin pour par exemple lancer une synchro d’équipement ou autre ou simplement afficher le statut de la connexion.

1 « J'aime »

D’accord c’est bien utile pour les actions post-save.

mais je cherche encore a valider que le INPUT ne contient que des nombres avant le save et éventuellement empêcher le save. une idée pourrait être que si la fonction preConfig_xxx() retourne null alors on interrompt le save ? qu’en pensez vous ?

Sinon J’aboutis a ceci https://github.com/amg0/plugin-veralink dans plugin_info/configuration.php et configuration.js. mais c’est imparfait car ca n’empêche pas la sauvegarde si l’utilisateur clique le bouton « sauver » quand meme.

Salut,

Un exemple que j’utilise sur un plugin directement dans la balise html :

oninput="if($(this).value().match(/^(0?[1-9]|[1-9][0-9])$/) == null) $(this).value($(this).value().slice(0, -1))"

C’est à adapter à ton cas d’usage.

Sinon tu lance une exception dans le pre_config mais il faut tester et voir ce qui te conviens personne pourra le dire ou le faire à ta place.

Comme je te disais: tu valides dans le pré config (par un is_numeric par exemple) et si pas bon tu jettes une exception throw exception...

1 « J'aime »

Merci a vous

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.